0

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

然而,当我两次运行定义时,出现以下错误。此名称是以前定义的,不能重新定义

这是一个简单的例子

 (define  a (* 1 4))
 a

跑两次

在调试器中

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

1 回答 1

1

racket 似乎在文件和 REPL 中表现不同。此文件将引发错误:

#lang racket

(define a 5)
(define a 6)

这个 REPL 会话不会:

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

这种行为是因为模块的工作方式。在文件中工作时,有一个隐式模块。一旦a在该模块中定义了符号,就不能在该模块中定义另一个具有相同名称的符号。REPL只是简单地扩展了表单,没有模块的所有仪式。

于 2015-02-10T19:01:06.030 回答