我试图只使用lisp基本函数来编写lisp解释器我在写我的评估,但我不确定我如何能检测到'所以我不评估符号。我知道“x”在内部被转换为(引用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.

我看到在前两个示例中,car检测到quote作为第一个元素并返回它,我不确定为什么在最后一个示例中它不这样做,尽管实际上'x应该转换为(quote x),然后作为参数传递给我的car我需要检查我的eval的一个基本情况,以便如果引用在原子之前,我不会返回它的值有没有办法只用基本函数来实现这个目的?
谢谢!

最佳答案

Lisp评估分阶段进行。
第一阶段是读取器,它将文本(字符序列)转换为表单,即列表、符号和文本表单(字符、字符串、数字、数组等)。
读取器还将'转换为围绕以下表单(可能是列表、符号等)的包装引用表单'a读作(quote a)'(a)读作(quote (a))
Eval然后只需要一个规则,如何作为运算符处理quote它从未看到任何'

关于lisp - 将'转换为lisp的报价,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53183948/

10-12 07:33
查看更多