为什么Scheme既有列表又有引用?

时间:2012-01-25 14:59:31

标签: scheme

由于(列表1 2 3)收益率(1 2 3)和(报价(1 2 3))收益率(1 2 3),两者的基本原理是什么?

由于Scheme是如此多余,所以这些必须有一些有意义的区别。那是什么?

2 个答案:

答案 0 :(得分:27)

在您提到的示例中,quotelist具有相同的结果,因为数字常量会自行计算。如果您使用列表中没有自我评估的表达式(比如变量或函数调用),您会看到差异:

(quote (a b c))会为您提供一个包含符号abc的列表,而(list a b c)会为您提供包含值的列表变量abc(如果变量不存在,则会出错)。

答案 1 :(得分:5)

列表创建一个列表,因此(列表1 2 3)创建一个三元素列表。

报价阻止评估。没有引号,表达式(1 2 3)将被评估为使用参数2和3调用的函数1,这显然没有意义。引号会阻止评估并返回列表,该列表在字面上以其外部可打印格式指定为(1 2 3)。