EVAL:Lisp 中的未定义函数 NIL
EVAL: undefined function NIL in Lisp
我正在尝试编写一个名为 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
所以我追查了代码,没有找到我在nil
上递归调用eval
的地方,所以我找不到问题所在。我也不确定我的计算函数是否正确执行了它应该执行的操作。由于我是 Lisp 的新手,我将不胜感激任何帮助。
如果我们在((lambda (z) (+ z 4)) 3)
上调用calculate
,它会在上面的cdr
上调用calculate
,即(3)
。
然后是对(substitute-and-eval nil 3 '(3))
的调用。然后尝试评估 (nil)
...
使用步进器很容易找到错误的调用,请参阅 STEP
。
我正在尝试编写一个名为 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
所以我追查了代码,没有找到我在nil
上递归调用eval
的地方,所以我找不到问题所在。我也不确定我的计算函数是否正确执行了它应该执行的操作。由于我是 Lisp 的新手,我将不胜感激任何帮助。
如果我们在((lambda (z) (+ z 4)) 3)
上调用calculate
,它会在上面的cdr
上调用calculate
,即(3)
。
然后是对(substitute-and-eval nil 3 '(3))
的调用。然后尝试评估 (nil)
...
使用步进器很容易找到错误的调用,请参阅 STEP
。