Que fait cette fonction lisp ?

Résolu
ap3 Messages postés 217 Date d'inscription   Statut Membre Dernière intervention   -  
 yoda -
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

  1. yoda
     
    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