由于(列表1 2 3)收益率(1 2 3)和(报价(1 2 3))收益率(1 2 3),两者的基本原理是什么?
由于Scheme是如此多余,所以这些必须有一些有意义的区别。那是什么?
答案 0 :(得分:27)
在您提到的示例中,quote
和list
具有相同的结果,因为数字常量会自行计算。如果您使用列表中没有自我评估的表达式(比如变量或函数调用),您会看到差异:
(quote (a b c))
会为您提供一个包含符号a
,b
和c
的列表,而(list a b c)
会为您提供包含值的列表变量a
,b
和c
(如果变量不存在,则会出错)。
答案 1 :(得分:5)
列表创建一个列表,因此(列表1 2 3)创建一个三元素列表。
报价阻止评估。没有引号,表达式(1 2 3)将被评估为使用参数2和3调用的函数1,这显然没有意义。引号会阻止评估并返回列表,该列表在字面上以其外部可打印格式指定为(1 2 3)。