EVAL:Lisp中未定义的函数NIL

时间:2015-10-23 15:32:46

标签: lisp common-lisp lambda-calculus

我试图编写一个名为calculate的函数,它将列表作为输入,并计算其值(作为lambda演算减速器)。

这是我的代码:

(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))))

但是当我在Lisp中调用以下行时,我收到错误:

(calculate '((lambda (x) (+ x 2))
             (lambda (y) (y))
             ((lambda (z) (+ z 4)) 3)))

错误:

EVAL: undefined function NIL

所以我跟踪了代码并且找不到我在eval上递归调用nil的任何地方,所以我无法找到问题。我也不确定我的计算函数是否能正确执行。既然我是Lisp的新手,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

如果我们在calculate上致电((lambda (z) (+ z 4)) 3),则会在calculate上方cdr拨打(3)

然后拨打(substitute-and-eval nil 3 '(3))。然后尝试评估(nil) ...

使用步进器很容易找到错误的通话,请参阅STEP