我有这几行我在drracket上运行, 我无法理解输出
> (define 'a 5)
> 'b
. . ..\..\Program Files\Racket\share\pkgs\drracket\drracket\private\rep.rkt:1088:24: b: undefined;
cannot reference an identifier before its definition
> '0
5
是重新定义的引用? 为什么' b不工作,' 0是5?
答案 0 :(得分:3)
首先,符号是原子值。它们不能被视为变量。
无论如何,你的第一行扩展为:
(define (quote a) 5)
这是定义球拍中的功能的简写。是的,您正在重新定义quote
。
当您尝试运行'b
时,您正在运行(quote b)
,它希望变量b
具有某个值,但事实并非如此。这就是您收到错误cannot reference an identifier before its definition
。
当您尝试运行'0
时,您正在运行(quote 0)
。 0是有效值,它将成为新函数中a
的值。因此,函数评估为正常,并返回5.
换句话说,它不只是0,这是一个有效的论据。
> (define 'a 5)
> (define b 12345)
> 'b
5
> '0
5
> '123454321
5
查看Racket documentation on symbols。符号不包含值;他们是值。您将要使用变量((define a 5)
)。