在Scheme中分配原子列表

时间:2009-01-21 04:10:36

标签: scheme racket

我正在尝试在Macintosh上使用DrScheme从“The Little Schemer”一书中学习Scheme。它首先出现的是“l是什么车,哪个是参数(a b c)?”

我理解这个问题的答案是,但是我无法确定要将什么键入Dr博士以“跟随”。关于如何分配给l的简单想法,例如> (def l('a'b'c))

给我错误: “函数调用:在打开括号后预期定义的名称或基本操作名称,但找到其他内容”

4 个答案:

答案 0 :(得分:4)

定义一些东西:

(define <name> <value>)

所以要定义l:

(define l '(a b c))

这将l定义为列表(a b c)。单引号标记引用它后面的任何内容,无论是符号还是列表,这意味着它不会被评估,而是按原样读取。但是,引用您要设置的名称。值得庆幸的是,这是Scheme中极少数的操作之一,你有这种不一致。

答案 1 :(得分:1)

试试这个:

(define l '(a b c))

此处,引用适用于整个列表(a b c)

答案 2 :(得分:1)

或者,只需使用

(car '(a b c))

错误告诉你的是:当读者看到一个列表时,它希望将列表的第一个元素视为一个函数。这就是(+ 1 2 3)的工作原理:它调用函数+。 (严格来说,它会查看符号'+并发现有一个绑定到该函数的函数,然后调用该函数。)

所以,当你输入

(define l ('a 'b 'c))

它查看内部列表然后想要找到一个函数。相反,它找到了名为a的符号。由于那里没有函数,你会收到错误。相反,如果您输入

(define l '(a b c))

你已经通过引用告诉读者,将其视为列表而不试图解释它。

这是Mac上MIT Scheme的一个例子:

1 ]=> (define li '(a b c))

;Value: li

1 ]=> (car li)

;Value: a

1 ]=> (car '(a b c ))

;Value: a

答案 3 :(得分:0)

非abbraveted形式的

(define l '(a b c))  

(define l (quote (a b c)))  

或者在这种情况下甚至是这样的:

(define l (list 'a 'b 'c))  

没有“列表”部分,它会尝试执行'a,显然是