Question sur un programme scheme

teltos -  
 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.
Configuration: Windows XP
Firefox 2.0.0.4

1 réponse

  1. amigo
     
    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