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
---Fonction Récursive et élément connu (o)--- FonctionneCode:
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 inconnu (x)--- Fonctionne PasCode:
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)
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

