【发布时间】:2018-11-07 05:19:39
【问题描述】:
我正在尝试仅使用 lisp 原始函数编写一个 lisp 解释器。我正在写我的评估,但我不确定如何检测 ' 所以我不评估符号。我知道 'x 在内部被转换为 (quote x),我启动了一个 lisp 解释器并尝试了以下操作:
(defun my-car (x) (car x))
(my-car (quote x)) -> QUOTE
(my-car '(x)) -> QUOTE
(my-car 'x) -> Error: Attempt to take the car of A which is not listp.
我看到在前两个示例中,汽车检测到引号是第一个元素并返回它,我不确定为什么在最后一个示例中它不这样做,因为本质上 'x 应该转换为 (quote x) 然后作为参数传递给 my-car。我需要检查 my-eval 的基本情况之一,这样如果引用在原子之前,我就不会返回它的值。有没有办法只使用原始函数来做到这一点?
谢谢!
【问题讨论】:
-
您是否使用自己的解释器来评估该 sn-p?在 Common Lisp 中,第一个和第三个应该表示错误,因为参数是一个符号,而不是一个列表,而第二个应该返回
X。
标签: lisp common-lisp