Question sur un programme scheme

Fermé
teltos - 27 févr. 2008 à 12:28
 amigo - 27 févr. 2008 à 14:04
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.

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
(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.
0