在球拍中定义引用过程?

时间:2014-07-08 12:30:18

标签: scheme racket

我有这几行我在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?

1 个答案:

答案 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))。