J'essaye d'écrire une fonction nommée calculate
qui obtient une liste comme une entrée, et calcule sa valeur (fonctionne comme un réducteur de lambda calculus).EVAL: fonction indéfinie NIL en Lisp
Voici mon code:
(defun substitue(x y z)
(cond ((atom z) (cond ((eq z y) x)
(T z)))
(T (cons (substitue x y (car z))
(substitue x y (cdr z))))))
(defun substitute-and-eval(x y z)
(eval (substitue x y z)))
(defun calculate(l)
(cond ((eq l nil) nil)
((atom l) (eval l))
(T (substitute-and-eval (calculate (cdr l))
(calculate (car l))
l))))
mais quand je l'appelle la ligne suivante dans Lisp, je reçois l'erreur:
(calculate '((lambda (x) (+ x 2))
(lambda (y) (y))
((lambda (z) (+ z 4)) 3)))
Erreur:
EVAL: undefined function NIL
Je retracé l'histoire de code et ne trouve nulle part où j'appelle récursivement eval
sur nil
, donc je ne pouvais pas trouver le problème. Je ne suis pas sûr que ma fonction de calcul fasse ce qu'elle devrait faire correctement. Comme je suis un novice en Lisp, j'apprécierais toute aide.
bel appel, merci. –