Scheme 在方案中定义
我试图在drracket上运行此命令:Scheme 在方案中定义,scheme,racket,Scheme,Racket,我试图在drracket上运行此命令: (define #t #f) 我得到以下错误消息: define: bad syntax in: #t 我想知道这个错误的原因是什么,以及为什么我可以这样做:(define+12),而不是这个 非常感谢 定义的第一个参数必须是符号+是一个符号foo是一个符号#t是#t,而不是符号1不是符号。define需要一个标识符作为它的第一个参数。在本例中,您提供的是计算结果为布尔值true的#t。因此出现了错误语法错误消息。 (定义) ,及。从描述中可以看出,
(define #t #f)
我得到以下错误消息:
define: bad syntax in: #t
我想知道这个错误的原因是什么,以及为什么我可以这样做:(define+12)
,而不是这个
非常感谢 定义的第一个参数必须是符号<代码>+是一个符号
foo
是一个符号<代码>#t是#t,而不是符号1
不是符号。define
需要一个标识符作为它的第一个参数。在本例中,您提供的是计算结果为布尔值true的#t
。因此出现了错误语法错误消息。
(定义)
,及。从描述中可以看出,#t
(更一般地说,任何以#
开头的内容)都不是标识符。s/symbol/identifier/g@ChrisJester-Young scheme在规范中有“symbol”一词,所以我坚持使用,请参见:和。标识符的外部形式实际上是一个符号,但在实际代码中,标识符和符号是非常不同的东西。同样,表达式(+3 4)
的外部形式是一个列表,但在运行代码时,它显然不会计算为列表。为了进一步强调我的观点,define
需要标识符而不是符号,这是无效的:(define(string->symbol“foo”)'条)
。见鬼,即使是(定义“foo”条)
也是无效的。正如我在对keltar的评论中提到的,请不要将符号和标识符混淆<代码>定义
需要标识符,而不是符号。例如,你不能做(定义(字符串->符号“foo”)条形图)
,或者甚至不能做(定义“foo”条形图)
。@ChrisJester Young-说得好,我更新了我的答案。这就是说,(定义“foo”条)
实际上在我测试的所有方案中都进行了评估:鸡肉、大便、赤壁、果壳。但这只是一个技术性问题,因为它扩展为一个包含标识符quote
的表达式。它实际上是R7RS规范中正式的(define)
。@GoZoner参见R7RS中的第5.3节(第25页)。它仍然使用
。(我同意它实际上可以归结为一个
,第7.1.6节(第64页)也说了同样的话。)很好。从语法上讲,它是一个
;语义上它是一个
(绑定到位置的标识符,非语法)。谢谢。这可能是个愚蠢的问题,但你为什么要这么做?D-:
(define <variable> <expression>)