为什么重复'(加载'不更新定义?

时间:2014-02-27 14:02:48

标签: scheme ironscheme

我在编辑器中打开了一个文件,并在旁边的控制台窗口中运行了一个方案。 以下是文件中的内容:

(import (rnrs))
(define THIS "Hello")
(display THIS) ;; does not work if loaded

我编辑文件中的定义,保存,然后切换到方案窗口并执行

(load "c:\\path\\to\\filename.ss")

我在输出中看到“Hello”,但是当我尝试访问这个时 - 这是未定义的。

我正在使用IronScheme(如果它是相关的)并且我是一般的新方案,那么如何通过修改和重新读取文件来更改会话中的定义?

1 个答案:

答案 0 :(得分:4)

R6RS中没有功能load;显然IronScheme有一个。您应该检查他们的文档,但最有可能发生的是加载的文件被读取,编译,然后在自己的环境中进行评估。因此将在该环境中定义标识符THIS。显然,您无权访问该环境。再次,查看文档。

由于IronScheme声称符合R6RS标准,实现目标的正确方法是:

;;lib-for-this.ss
(library (lib-for-this)
  (export THIS)
  (import (rnrs))
  (begin
    (define THIS "hello")
    (display THIS)))

然后当您想使用THIS时:

> (import (lib-for-this))
hello         ;; <= from `display` most likely
> THIS
"hello"