在计划中分配原子列表
问题描述:
我正试图在Macintosh上使用DrScheme从“The Little Schemer”一书中学习Scheme。它开始于诸如“什么是我的车哪里l是论据(a b c)?”在计划中分配原子列表
我知道这个问题的答案是a,但我无法真正弄清楚要在Dr Scheme中输入什么来“遵循”。关于如何分配给l的一个简单的想法,例如>(def l('a'b'c))
给我错误: “函数调用:期望一个定义的名称或一个基本的操作名称括号,却发现别的东西”
答
要定义的东西:
(define <name> <value>)
所以定义L:
(define l '(a b c))
这定义l
作为列表(a b c)
。单引号标记引用它后面的任何内容,不管它是符号还是列表,这意味着它不会被评估,而是按原样读取。您不要,但是,请引用您要设置的名称。值得庆幸的是,这是计划中极少数的操作之一,在这种操作中您会遇到这种不一致。的
(define l '(a b c))
答
试试这个:
(define l '(a b c))
在这里,报价适用于整个列表(a b c)
。
答
或者,只是使用
(car '(a b c))
什么错误是告诉大家的是:当读者看到一个列表,它要到列表中的第一个元素当作一个函数。这就是(+ 1 2 3)
的工作原理:它调用函数+
。 (严格来说,它看起来在符号'+
,发现存在绑定到该函数,然后调用该函数。)
所以,当你键入
(define l ('a 'b 'c))
它着眼于内部列表,然后想找到一个功能。相反,它会发现名为a
的符号。由于那里没有功能,所以会出现错误。如果您改为输入
(define l '(a b c))
您已通过引用告诉读者,它将该列表视为一个列表而不试图解释它。
下面是从麻省理工学院计划在Mac上的例子:
1 ]=> (define li '(a b c))
;Value: li
1 ]=> (car li)
;Value: a
1 ]=> (car '(a b c))
;Value: a
答
非abbraveted形式
(define l (quote (a b c)))
或在这种情况下,即使是这样:
(define l (list 'a 'b 'c))
没有它试图执行“一个 “清单” 部分,显然
错误消息: def:name未定义,不是参数,也不是原始名称 – Leonard 2009-01-21 04:16:13
它应该是“define”而不是“def”,请参阅我的答案以获取更多信息:http://stackoverflow.com/questions/464057/在计划中分配一个原子列表#464072 – 2009-01-21 04:17:37
呃,我只是按照你的例子。改为'定义'。 – 2009-01-21 04:21:21