【发布时间】:2015-10-23 15:32:46
【问题描述】:
我正在尝试编写一个名为 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 的新手,我将不胜感激。
【问题讨论】:
标签: lisp common-lisp lambda-calculus