2009-10-16 6 views
0

que je veux prendre le premier élément de la liste '(4 3 1) '(5 6 8)Scheme Comment prendre le premier article dans la liste?

Je veux quelque chose comme ça

(first '(4 3 1) '(5 6 8)) 

doit me renvoyer le premier élément

(4 3 1) 

comme résultat. Y a-t-il quelque chose comme ça dans la fonction de construction de schéma que je peux appeler?

voiture ne fonctionne pas, car il ne me renvoie le premier élément à l'intérieur 1 liste

list-ref ne fonctionne pas, même raison ci-dessus, me retourne 1 point dans la liste

Comment Je fais ça? si j'ai besoin de l'écrire moi-même cette première fonction?

Répondre

6

Vous pouvez utiliser la procédure list-ref pour obtenir un élément d'une liste, en utilisant son index, par exemple:

(let ((l '((4 3 1) (5 6 8)))) 
    (list-ref l 0)) ; get the element at index 0 

Toutefois, si vous voulez que le premier élément, vous pouvez utiliser car:

(let ((l '((4 3 1) (5 6 8)))) 
    (car l)) 

Vérifiez l'extrait en cours d'exécution here.

+0

NICE c'est génial – Jonathan

+0

N'avez-vous pas simplement dit que la liste-ref ne fonctionnait pas ...? –

1

Il a été un moment que je régime, mais ne vous devez avoir les listes dans leur propre liste première

(first (list '(4 3 1) '(5 6 8)))

+0

oh oui, bon point – Jonathan

+0

Non, ce n'est pas le cas. Vous pouvez définir une fonction qui prend deux paramètres, dont chacun peut être une liste, et retourner simplement le premier. Vous voudriez utiliser une liste de listes si (par exemple) vous vouliez, pour une raison quelconque, accepter un nombre arbitraire de listes, et ne renvoyer toujours que le premier d'entre elles. –

+0

Bon point. J'assumais le nombre arbitraire de listes dans le cadre des exigences. – Kendrick

4

Vous essayez trop dur:

> (define (first a b) a)  
> (first '(1 2 3) '(4 5 6)) 
(1 2 3) 
+0

quelque chose comme ça fonctionne, mais je suppose que je n'ai pas mis tout mon problème ici. ça ne marche pas quand l'un d'entre eux n'a pas de valeur. Mais merci je pense que j'ai eu l'idée :) – Jonathan

4

Vous pouvez utiliser "." dans la définition de la fonction de prendre un nombre arbitraire d'arguments.

(define (first . args) (car args)) 
(first '(4 3 1) '(5 6 8)) ;; => (4 3 1) 
+0

Pourquoi ne pas simplement faire (définir la première voiture) '? – Matteo

+0

'car' prend seulement 1 argument. – torus

Questions connexes