Que fait cette fonction lisp ?

Résolu/Fermé
ap3
Messages postés
214
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
11734
Date d'inscription
jeudi 30 juin 2005
Statut
Contributeur
Dernière intervention
20 mai 2022
8 281
20 déc. 2017 à 20:00
Bonsoir,

Merci d'utiliser les balises, à lire https://www.commentcamarche.net/faq/4622-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