(1 2)报告无效功能错误

时间:2019-05-27 11:42:29

标签: lisp

阅读Cons-Cell-types

ELISP> '(1 2)
(1 2)

ELISP> (1 2)
*** Eval error ***  Invalid function: 1

所报告的错误使我感到困惑,
如何将整数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)