Salut tout le monde

J'ai un petit probleme avec Clisp, je dois faire une fonction qui filtre une liste et garde seulement les éléments voulu. Une version de cette fonction doit n'avoir qu'un seul argument , la liste a trier et donc l’élément a trier est défini dans la fonction.

Ça j'y arrive mais des que je veux modifier cette même fonction pour qu'elle prenne en compte un deuxième argument qui serai l’élément a trier ça coince :/

Le truc est que quand je fais cette fonction avec une boucle iterative ca marche mais des que j'en fais une fonction recursive ca marche pas.

---Fonction avec boucle itérative--- Fonctionne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
(defun garde (x liste &aux bassine)
(setq bassine nil)
(loop
        (cond
                ((not liste) (return bassine))
                ((equal (car liste) x)(push (pop liste) bassine))
                ((pop liste)) )))))    
 
(garde 'o '(o o o & o &))
(O O O O)
---Fonction Récursive et élément connu (o)--- Fonctionne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
(defun garde-o (liste)
        (cond
                ((not liste) nil)
                ((equal (car liste) 'o) (cons (car liste) (garde-o(cdr liste)) ))
                ((not (equal (car liste) 'o)) (garde-o(cdr liste)) )) )
 
(garde-o '(o o o & o &))
(O O O O)
---Fonction Récursive et élément inconnu (x)--- Fonctionne Pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
(defun garde (x liste)
(cond
        ((not liste) nil)
        ((not (equal (car liste) x)) (garde(x (cdr liste))))
        ((equal (car liste) x) (cons (car liste) (garde(x (cdr liste)))))))
 
(garde '(o o o)'o)
 
 
    *** - EVAL: undefined function X