【问题标题】:EVAL: undefined function NIL in LispEVAL:Lisp 中未定义的函数 NIL
【发布时间】: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


    【解决方案1】:

    如果我们在((lambda (z) (+ z 4)) 3) 上调用calculate,那么它会在上面的cdr 上调用calculate,即(3)

    然后有一个电话到(substitute-and-eval nil 3 '(3))。然后尝试评估(nil)...

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

    【讨论】:

      猜你喜欢
      • 2011-05-07
      • 1970-01-01
      • 2018-03-13
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多