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