我正在编写一个 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
. 我的问题如下:
- 为什么在 Common Lisp 中不允许这样做?
- 如何在 Common Lisp 中实现相同的目标?
- 我的口译员应该改变什么,以防止这种事情发生?
为了帮助您回答最后一个问题——目前set
原语基本上只是将原子与环境中的值相关联。上面的代码在我的解释器中工作,因为要评估(f '(a b c))
它f
在环境中查找,发现它是一个 lambda 函数,然后将该 lambda 函数应用于参数'(a b c)
。
谢谢您的帮助。
编辑:这不是“Lisp-1 和 Lisp-2 之间有什么区别?”的副本。尽管 Lisp-1 和 Lisp-2 之间的差异可能是为什么这不起作用的原因clisp
,但我的问题实际上集中在set
原语的机制及其底层实现上。