怎么样,在
`(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/