Ryo Akagi
another_face_another_smile****@yahoo*****
2010年 12月 26日 (日) 00:28:17 JST
赤木といいます 説明が難しいのですが x-m, aa-m, bb-m, a-m, b-m の5つの モジュール があっ てそれらを aa x bb \/\/ ←下のやつが、上のやつを extend a b ←この2つを import の様な関係にします。(後ろの -m は省略) その際、モジュール a-m, b-m の中で (extend aa-m x-m) とすると、特に問題なく 5つの モジュール が export しているものが全部見 れるのですが (extend x-m aa-m) だと、a-m を import する順番によっては、aa-m が export しているものが見 えません。 ただし、 (global-variable-ref (find-module 'a-m) 'aa-v) (with-module a-m aa-v) の様に、a-m から見ると aa-m が export しているものが見えます。 (aa-v は aa-m で export している) ここまでで説明したものを、プログラムにして添付しています % gosh t.scm で実行できます また aa x \/ a の様に、片方だけにすると何も起らなくなりました。 以上です -------------- next part -------------- (define-module x-m (export x-v) (define x-v 0) ) (define-module aa-m (export aa-v) (define aa-v 1) ) (define-module bb-m (export bb-v) (define bb-v 2) ) (define-module a-m (extend x-m aa-m) ; ダメ ;; (extend aa-m x-m) ; OK (export a-v) (define a-v 3) ) (define-module b-m (extend x-m bb-m) ; ダメ ;; (extend bb-m x-m) ; OK (export b-v) (define b-v 4) ) ;; 以下2つどちらを選んでもエラー (import a-m) (import b-m) ; "unbound variable: aa-v" になる ;; (import b-m) (import a-m) ; "unbound variable: bb-v" になる ;; 以下、評価しているだけ a-v b-v x-v aa-v ; error bb-v (global-variable-ref (find-module 'a-m) 'aa-v) ; OK (with-module a-m aa-v) ; OK (global-variable-ref (find-module 'user) 'aa-v) ; error (with-module user aa-v) ; error