我正在尝试在emacs中使用geiser-mode来运行racket代码。 我已经能够安装geiser-mode并启动了球拍。
然而,当我运行两次定义时,我得到以下错误。 此名称先前已定义,无法重新定义
这是简单的例子
(define a (* 1 4))
a
跑两次
在调试器中
#a: this name was defined previously and cannot be re-defined
#in: a
答案 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的所有仪式。