为什么不在Common Lisp中设置lambda的工作?

时间:2017-11-05 21:59:35

标签: lisp common-lisp interpreter lisp-2

我正在编写一个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显然不允许这样的事情。我的问题如下:

  1. 为什么Common Lisp中不允许这样做?
  2. 如何在Common Lisp中实现相同的目标?
  3. 我的翻译应该改变什么才允许这种事情发生?
  4. 为了帮助您回答最后一个问题 - 目前set原语基本上只是将原子与环境中的值相关联。上面的代码在我的解释器中工作,因为要评估(f '(a b c))它在环境中查找f,发现它是一个lambda函数,然后将该lambda函数应用于参数'(a b c)

    感谢您的帮助。

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

0 个答案:

没有答案