之前已定义了Geiser和Racket变量,无法重新定义

时间:2015-02-08 14:28:32

标签: emacs racket geiser

我正在尝试在emacs中使用geiser-mode来运行racket代码。 我已经能够安装geiser-mode并启动了球拍。

然而,当我运行两次定义时,我得到以下错误。     此名称先前已定义,无法重新定义

这是简单的例子

 (define  a (* 1 4))
 a

跑两次

在调试器中

#a: this name was defined previously and cannot be re-defined
#in: a

1 个答案:

答案 0 :(得分:0)

racket 出现,在文件和REPL中表现不同。该文件将引发错误:

#lang racket

(define a 5)
(define a 6)

这个REPL会议不会:

> (define a 5)
> a
5
> (define a 6)
> a
6

行为是因为modules的工作方式。在文件中工作时,有一个隐式模块。一旦在该模块中定义了符号a,就无法在该模块中定义具有相同名称的另一个符号。 REPL只是expands forms而没有modules的所有仪式。