我正在尝试在Macintosh上使用DrScheme从“The Little Schemer”一书中学习Scheme。它首先出现的是“l是什么车,哪个是参数(a b c)?”
我理解这个问题的答案是,但是我无法确定要将什么键入Dr博士以“跟随”。关于如何分配给l的简单想法,例如> (def l('a'b'c))
给我错误: “函数调用:在打开括号后预期定义的名称或基本操作名称,但找到其他内容”
答案 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,显然是