什么'(清单1 2)在Scheme中意味着什么?

时间:2015-08-25 15:52:41

标签: scheme lisp racket

我正在研究SICP,在2.2.2节的开头,它给出了以下代码:(cons '(list 1 2) (list 3 4)))并说它构造了一个像((1 2) 3 4)这样的列表。但是当我把它输入DrRacket(我实际上是在这里使用Racket)时它产生'((list 1 2) 3 4)并且如果我写(cons (list 1 2) (list 3 4))那么它就没问题了。我知道方案'(1 2)等于(list 1 2)'(list 1 2)是什么意思?

4 个答案:

答案 0 :(得分:3)

它应该是指“由原子列表,原子1和原子2组成的列表”。在Scheme评估列表(单引号阻止)之前,它不会将“list”与任何其他字符串区别对待。

答案 1 :(得分:2)

Scheme有一个方便的语法来表示数据文字:使用'前缀任何表达式(单引号)和表达式,而不是被评估,将作为数据返回

了解更多信息:

http://courses.cs.washington.edu/courses/cse341/04wi/lectures/14-scheme-quote.html

答案 2 :(得分:2)

修复输出样式

首先,当你在DrRacket中使用count class X if class x amount == 1 then nothing else select first change to XZY+1+var loop until amount == 1 语言时,默认的打印方式不是打印它的表示,而是一个计算结果相同的表达式。您可以从菜单语言>>中将其关闭选择语言。您选择显示详细信息,然后在输出样式下选择

运行后,在评估#!racket时,您将获得输出'test

表达中的错误

section 2.2.2中有一个表达式test。它与您在问题(cons (list 1 2) (list 3 4))中所写的内容不一样。虽然表达式(cons '(list 1 2) (list 3 4))将值(list 1 2)list的过程1应用于2,但表达式(1 2)只返回引用的数据'(list 1 2)不变。

因此:

(list 1 2)

答案 3 :(得分:1)

符号'foo生成一个名为foo的符号。

符号'(foo bar)会生成一个包含两个名为foobar的符号的列表。

以同样的方式'(list foo bar)列出三个符号。符号'list碰巧被称为list

现在(list 'foo 'bar)列出了两个名为foobar的符号列表。

相关问题