Que fait cette fonction lisp ?

Résolu/Fermé
ap3 Messages postés 215 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 10 mars 2021 - 20 déc. 2017 à 19:04
 yoda - 21 déc. 2017 à 20:17
Bonjour,
je suis nouveau en lisp et je ne comprends pas ce que fait cette fonction :
(defun fct (liste1 liste2 liste3)
(cond ((eval liste1) (eval liste2) (fct liste1 liste2 liste3))
(t (eval liste3)))

)

Merci d'avance.

2 réponses

bendrop Messages postés 12596 Date d'inscription jeudi 30 juin 2005 Statut Contributeur Dernière intervention 19 novembre 2024 8 293
20 déc. 2017 à 20:00
Bonsoir,

Merci d'utiliser les balises, à lire https://www.commentcamarche.net/infos/25911-ccm-astuces-et-conseils-pour-la-redaction/


(defun fct (liste1 liste2 liste3)
(cond ((eval liste1) (eval liste2) (fct liste1 liste2 liste3))
(t (eval liste3)))

)


Ceci dans le but d'être lisible.

Bav.
0
Bonjour

Cette fonction est une fonction récursive qui évalue 3 expressions lisp (liste1 liste2 et liste3)
(defun fct (liste1 liste2 liste3) 
(cond
((eval liste1) (eval liste2) (fct liste1 liste2 liste3))
(t (eval liste3))
)
)

equivalent à
(defun fct2 (liste1 liste2 liste3)
(if (eval liste1)
(progn
(eval liste2)
(fct2 liste1 liste2 liste3)
)
(eval liste3)
)
)

ce qui signifie : tant que liste1 est different de nil on evalue liste2 sinon on retourne liste3

exemple (en autolisp, sinon adapter la syntaxe)
(setq a '(cond ((>= x 0) (print x))))
(setq b '(setq x (- x 1)))
(setq c '(progn (print "terminé") (princ)))
(setq x 5)

;appel a la fonction
(fct a b c)

resultat:
5
4
3
2
1
0
"terminé"
0