Bonjour à tous !

Voilà dans mon cours j'ai un exemple de fonction qui est le suivant :
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) ) )
    )
)
Et donc apparemment cette fonction teste si une liste est un ensemble (pas de doublons).

Quand on fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ensemble '(a b c d e f g)
Ca m'affiche t

Et quand on fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ensemble '(1 2 (1 2 3) 2 (3 4))
Ca m'affiche NIL ou ()...

Bref il y a UN truc que j'arrive pas à saisir, c'est ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
    (cond
        ((null liste) t)
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)...




Et il y a un autre exemple qui me turlupine c'est celui là :
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) ) )
	)
)
C'est une fonction qui teste si un élément est présent dans une liste

Quand on fait :

ça affiche (a f g)

Et quand on fait :

ça affiche ()

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 :/