我试图编写一个名为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的新手,我将不胜感激。
答案 0 :(得分:2)
如果我们在calculate
上致电((lambda (z) (+ z 4)) 3)
,则会在calculate
上方cdr
拨打(3)
。
然后拨打(substitute-and-eval nil 3 '(3))
。然后尝试评估(nil)
...
使用步进器很容易找到错误的通话,请参阅STEP
。