elisp 準備
- Gauche の define-module は Special-form であり、引数はシンボルでなくてはならない。(http://practical-scheme.net/gauche/man/gauche-refj_32.html)
(define-module "foo") ;; error (define-module (string->symbol "foo")) ;; error (define-module (find-module 'user)) ;; error (define-module |hello world|) ;; ok (select-module user) ;; ok (select-module (find-module 'user)) ;; error (read-from-string "(define-module bla)") ;; => (define-module bla) (find-module 'bla) ;; => #f
(if #t (define-module foo) (define-module bar)) ;; => module foo, module bar とも定義される。 (if #t (select-module user) (select-module no-such-module)) ;; error
どうやら module 関連は read された瞬間に評価される特別なものらしい。module 関連はコンパイル時に評価される。実用上はファイル先頭から (select-module symbol) を探して symbol を読めばファイルから module をだいたい決定できるだろう。必要なら手動で定義する手段を作れば十分。
R6RS だとそもそも library で全体を囲うようなので、library の一部だけ再定義、とかきっと無いのだろう。あ、そもそも REPL すら仕様範囲外なんだっけ。うーん。エレガントなような、 lisp じゃないような複雑な気分。