1

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

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

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

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

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

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

4

1 回答 1

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"
于 2014-02-27T16:29:54.180 回答