Scheme 在方案中定义

Scheme 在方案中定义,scheme,racket,Scheme,Racket,我试图在drracket上运行此命令: (define #t #f) 我得到以下错误消息: define: bad syntax in: #t 我想知道这个错误的原因是什么,以及为什么我可以这样做:(define+12),而不是这个 非常感谢 定义的第一个参数必须是符号+是一个符号foo是一个符号#t是#t,而不是符号1不是符号。define需要一个标识符作为它的第一个参数。在本例中,您提供的是计算结果为布尔值true的#t。因此出现了错误语法错误消息。 (定义) ,及。从描述中可以看出,

我试图在drracket上运行此命令:

(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>)