Bonjour à tous !
Voilà dans mon cours j'ai un exemple de fonction qui est le suivant :
Et donc apparemment cette fonction teste si une liste est un ensemble (pas de doublons).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 (defun ensemble (liste) (cond ((null liste) t) ((member (car liste) (cdr liste)) ()) (t (ensemble (cdr liste) ) ) ) )
Quand on fait :
Ca m'affiche t
Code : Sélectionner tout - Visualiser dans une fenêtre à part ensemble '(a b c d e f g)
Et quand on fait :
Ca m'affiche NIL ou ()...
Code : Sélectionner tout - Visualiser dans une fenêtre à part ensemble '(1 2 (1 2 3) 2 (3 4))
Bref il y a UN truc que j'arrive pas à saisir, c'est ça :
On va tester une première condition qui est de savoir si la liste passée en paramètre est nulle... Pourtant dans le premier cas, la liste n'est pas nulle (à moins qu'une liste sans doublons est considérée comme une liste nulle)...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 (cond ((null liste) t)
Et il y a un autre exemple qui me turlupine c'est celui là :
C'est une fonction qui teste si un élément est présent dans une liste
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 (defun member (x liste) (cond ((null liste) ()) ((equal (car liste) x) liste) (t (member x (cdr liste) ) ) ) )
Quand on fait :
ça affiche (a f g)
Code : Sélectionner tout - Visualiser dans une fenêtre à part member 'a '(b d a f g)
Et quand on fait :
ça affiche ()
Code : Sélectionner tout - Visualiser dans une fenêtre à part member '3 '(2 5 9)
Donc là c'est à peu près le même genre d'incompréhension, il teste une première fois si la liste est nulle, mais elle n'est jamais nulle oO.. enfin il n'est pas censé savoir que l'élement passé en premier paramètre ne se trouve pas dans la liste avoir d'être passé dans les autres tests... Donc je comprend vraiment pas là je suis un peu perdu :/
Partager