Fonction Recursive en Clisp
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:
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:
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:
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 |