Question sur un programme scheme
teltos
-
amigo -
amigo -
Bonjour,
un copain m'a dit que cette question revenait souvent et qu'il fallait là maitriser.
Voiçi la question:
- Donner une définition récursive de la fonction Dernier(liste), qui retourne le dernier élément
d’une liste non vide.
j'essaie un programme:
(define dernier ;
(lambda (l n);
(if (= (length l) 0) 'error;
(if (= n (car l)
car l
(drnier (cdr l) n)))))
Je n'arrive pas à cerner le problème, qu'est ce qui ne va pas ?, la récursivité est assuré, pourtant on m'affiche:
-expected one question expression and two answer expressions, but found 1 expression in: (if (= n (car l) car l (drnier (cdr l) n)))
Comment je dois écrire le programme pour que ça marche.
Ah une derniere chose,c'est quoi la difference entre "length" et "null?"?
Merci.
un copain m'a dit que cette question revenait souvent et qu'il fallait là maitriser.
Voiçi la question:
- Donner une définition récursive de la fonction Dernier(liste), qui retourne le dernier élément
d’une liste non vide.
j'essaie un programme:
(define dernier ;
(lambda (l n);
(if (= (length l) 0) 'error;
(if (= n (car l)
car l
(drnier (cdr l) n)))))
Je n'arrive pas à cerner le problème, qu'est ce qui ne va pas ?, la récursivité est assuré, pourtant on m'affiche:
-expected one question expression and two answer expressions, but found 1 expression in: (if (= n (car l) car l (drnier (cdr l) n)))
Comment je dois écrire le programme pour que ça marche.
Ah une derniere chose,c'est quoi la difference entre "length" et "null?"?
Merci.
A voir également:
- Question sur un programme scheme
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Desinstaller un programme sur windows - Guide
- Programme word gratuit - Guide
- Message programmé - Guide
1 réponse
bonjour,
tu as commis plusieurs erreurs:
car l s'ecrit (car l)
la fonction s'appele dernier et dana la recursivité tu ecris drnier
voila pour la syntaxe sinon la fonction un un predicat qui renvoie #t pour vrai et #f pour faux.
il faut l'ecrire comme ça
la fonction length renvoie le nombre d'elements d'une liste
la fontion null? Returns #t if obj is the empty list, otherwise returns #f.
tu as commis plusieurs erreurs:
car l s'ecrit (car l)
la fonction s'appele dernier et dana la recursivité tu ecris drnier
voila pour la syntaxe sinon la fonction un un predicat qui renvoie #t pour vrai et #f pour faux.
il faut l'ecrire comme ça
(define dernier?
(lambda (l n)
(if (= (length l) 0) #f ; variante (if (null? l) #f
(if (and (= (length l) 1) (= (car l) n)) #t
(dernier? (cdr l) n)
)
)
))
;test
(define l (list '1 2 3 4 5 6 7 8 9))
(dernier? l 9); -> #t
(dernier? l 5); -> #f
la fonction length renvoie le nombre d'elements d'une liste
la fontion null? Returns #t if obj is the empty list, otherwise returns #f.