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
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
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
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 |
Partager