1

我正在编写一个 lisp 解释器(用 C 语言),并且正在实现 lambda 函数和set语言特性。在我的解释器中,以下工作:

(set 'f (lambda (x) (cdr x)))
(f '(a b c))

输出(b c)。但是,Input a value to be used instead of (FDEFINITION 'F)当我在clisp. 我的问题如下:

  1. 为什么在 Common Lisp 中不允许这样做?
  2. 如何在 Common Lisp 中实现相同的目标?
  3. 我的口译员应该改变什么,以防止这种事情发生?

为了帮助您回答最后一个问题——目前set原语基本上只是将原子与环境中的值相关联。上面的代码在我的解释器中工作,因为要评估(f '(a b c))f在环境中查找,发现它是一个 lambda 函数,然后将该 lambda 函数应用于参数'(a b c)

谢谢您的帮助。

编辑:这不是“Lisp-1 和 Lisp-2 之间有什么区别?”的副本。尽管 Lisp-1 和 Lisp-2 之间的差异可能是为什么这不起作用的原因clisp,但我的问题实际上集中在set原语的机制及其底层实现上。

4

0 回答 0