Gauche > Archives > 2014/07/12

2014/07/12 05:24:29 UTCkaki
#
REPLからエラーの起きるライブラリを繰り返しr7rs#importすると,エラーが起きなくなります.
#
;; temp.scm
(define-library (temp)
  (begin
    (f)))

;; REPL
gosh> (import (temp))
*** ERROR: Compile Error: Compile Error: unbound variable: f

"(standard input)":1:(import (temp))

Stack Trace:
_______________________________________
  0  (eval expr env)
        At line 179 of "/usr/local/share/gauche-0.9/0.9.4-rc2/lib/gauche/interactive.scm"
gosh> (import (temp))
#<undef>
gosh[r7rs.user]>
2014/07/12 05:42:06 UTCshiro
#
ああ、r7rs#importはモジュールの存在をチェックしてそれが無い場合だけ読みに行くんだけど、define-libraryはライブラリ本体を評価する前にモジュールtempを作っちゃうので、2度目はそもそもファイルを読みに行かないんだな。
#
useの場合はモジュールの存在でなくprovided?でファイルが読まれたかどうかをチェックしてて、途中でエラーになった場合はprovided?にならないからまた読める。ただそのために、ファイルとして独立してるものしかuseできない。r7rs#importの場合、ファイルとして独立してるかどうかは関係ないからなあ。
2014/07/12 06:29:15 UTCkaki
#
なるほど,そういう違いがこういう所で出るんですね.分かっていればgauche.reloadでよさそうですが,ちょっと混乱しそうです.
2014/07/12 06:37:21 UTCshiro
#
これは混乱のもとなので何とかしたい。