ELISP> '(1 2)
(1 2)
ELISP> (1 2)
*** Eval error *** Invalid function: 1
所报告的错误使我感到困惑,
如何将整数1插入无效的函数中。
答案 0 :(得分:2)
请注意,该段落与阅读和 printing lisp形式有关:
列表的读取语法和打印表示形式相同,并且由左括号,任意数量的元素和右括号组成。
当诱使(1 2)
时,解释器将构建两个元素的列表,这些元素在打印时也将打印为(1 2)
。但是,在Read-Eval-Print-Loop中,将立即评估正在读取的表单,evaluation rules表示:
如果要评估的列表的第一个元素是Lisp函数对象,字节码对象或原始函数对象,则该列表是函数调用。
写引号列表时结果不同:
'(1 2)
在上面,引用语法将表单转换为以下形式(在读取时):
(quote (1 2))
并且quote运算符的特殊之处在于,它在进行评估时不会评估其子表达式,而是按原样返回它。这就是为什么REPL中的'(1 2)
会被视为引号括起来的文字列表,即(1 2)
。