[Gauche-devel-jp] Re: lib/slib.scmの(home-vicinity)

アーカイブの一覧に戻る

Shiro Kawai shiro****@lava*****
2003年 12月 12日 (金) 12:17:51 JST


From: Shoji Kuzukami <kuzuk****@manba*****>
Subject: [Gauche-devel-jp] Re: lib/slib.scmの(home-vicinity)
Date: Fri, 12 Dec 2003 11:59:33 +0900

> 不具合は出ていませんが,
> 単にmacroexpandをしたときにシンボルでなければ,デバッグが難しくなると思うからです.
> 展開結果の同一性を確認するのが難しいからです.
> ;すくなくとも,macroのデバッガは,処理系依存のものになってしまいます.
> ;両方ともできるのが正解だと思います.

なるほど。確かにポータブルに同一性を確認するのは難しいですね。
eqv? で identifierが比べられるようにとかしておくのがいいのだろうか。

今思い出したのですが、free variableは特にsymbolにできない理由と
いうのがありました。
Gaucheでは、syntax-caseはモジュールを含めた環境でhygenicに動作します。

つまり、こんなコードがあった場合:

(define-module foo
  (define (foo-proc ...))
  (define-syntax foo-macro
    (syntax-case ()
      ((foo-macro x) (foo-proc x))))
  (export foo-macro))

(define-module bar
  (import foo)
  (define (foo-proc ...))
  (foo-macro ...))

barでのfoo-macroの展開結果に含まれるfoo-procは、
マクロ使用環境(bar)でのfoo-procではなく、
マクロ定義環境(foo)でのfoo-procを参照します。

マクロ展開結果が補助手続きを必要とする場合に、補助手続き自体を
外に見せる必要がないですし、hygenicという点からもこのほうが
自然だと思うのですが、free variableをシンボルにしてしまうと
これが出来ないんですよね…

--shiro




Gauche-devel-jp メーリングリストの案内
アーカイブの一覧に戻る