common-lisp - Common Lisp 反引号评估 : delimiter and operator

标签 common-lisp interpretation

怎么样,在

`(1 ,(+ 1 1) (- 4 1) 4) ; '(1 2 (- 4 1) 4)

减号 ("-") 不被视为运算符(而是作为符号;'- 而不是 #'- 正确吗?)(这部分我想我理解。)

但为什么,第三个左括号确实被评估为 '( -> (list ...(即列表/表达式分隔符和不仅仅是像上面的'-这样的文字?)解释器是“向前看”结束定界符还是简单地说,“好的,这应该是一个列表。如果右边没有定界符,则表达式无效那不是我的问题。”?

很抱歉提出一个令人困惑的问题;归结起来,我想我的问题是:解释器如何逐步正确地评估上面的列表? (也可以随意更正术语。)

最佳答案

`(1 ,(+ 1 1) (- 4 1) 4)

反引号是一个读取宏。它在读取时转换表达式。

这样做:

 (read-from-string "`(1 ,(+ 1 1) (- 4 1) 4)")

这被读取为特定于实现的形式。类似这样的东西:

 (list* 1 (+ 1 1) '((- 4 1) 4))

CL 标准没有指定反引号解析的内容。

所以上面的转换是由读者完成的。

然后使用通常的规则进行评估。没什么特别的。

LIST* 获取第一个参数并在最后一个参数(列表)之前对它们进行转换。

关于common-lisp - Common Lisp 反引号评估 : delimiter and operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11601227/

相关文章:

Java - 解释型还是编译型?

c - 当从 C 调用一个 go 程序时,它是编译的还是解释的?

java - "p[z] <-- y"伪代码在java中的解释是什么?

clojure - 包 vs 命名空间 vs 模块

common-lisp - 在 Common Lisp 中传递函数

条件的 LISP 特殊形式

lisp - 这段 Lisp 代码做了什么?

lisp - 框架中的评估表达式仅产生 UNBOUND-VARIABLE

machine-learning - 决策树解释(泰坦尼克号数据)