For Gauche 0.9.5


Next: , Previous: , Up: ライブラリモジュール - R7RS統合   [Contents][Index]

10.3 R7RSライブラリ形式

R7RSのライブラリはdefine-libraryフォームで定義されます。

R7RSの観点ではdefine-libraryフォーム自体はSchemeコードではありません。 それ自身はScheme世界の外にあります。define-libraryフォームが、 R7RS Schemeの境界となるのです。その内側はR7RSの世界であり、 その外側に関してR7RSは関知しません。例えば、R7RSの仕様の範囲内では、 define-libraryフォーム自体をマクロで生成する、ということはできません。

Gaucheでは、R7RSの世界をGaucheの世界の中に作っています。 define-library自体はGauche世界で解釈されます。実際、 define-libraryはGaucheのマクロとして実装されています。 けれどもR7RSのコードを書く際には、define-libraryがどう実装されているかは 気にする必要はありません。また、define-libraryの外側には 何も書かないようにしてください。

Macro: define-library library-name library-decl …

[R7RS] library-nameという名前を持つライブラリを定義します。 library-nameはシンボルもしくは10進整数のリストです。

<library-name> : (<identifier-or-base-10-integer>
                  <identifier-or-base-10-integer> ...)

ライブラリ宣言library-declは、エクスポート宣言、 インポート宣言、beginに囲まれたSchemeコード、 インクルードフォーム、あるいはcond-expandフォームです。

<library-decl> : (export <export-spec> …)
               | <import declaration>
               | (begin <command-or-definition> …)
               | (include <string> <string2> …)
               | (include-ci <string> <string2> …)
               | (include-library-declarations 
                        <string> <string2> …)
               | (cond-expand <cond-expand-clause>
                              <cond-expand-clause2> …)
               | (cond-expand <cond-expand-clause>
                              <cond-expand-clause2> …
                              (else <library-decl> …))

export宣言はGaucheのexportフォームと同じです。 モジュールの使用参照。

import宣言はR7RSのimportフォームで、 3つのimport形式で説明しています。

includeinclude-ciフォームはGaucheのそれと同じです。 インクルード参照。Gaucheはインクルードされるコードの中身については 感知せず、単にその中身をbeginで囲んで元のフォームと 置き換えるだけです。けれどもR7RSでは、これらのフォームが読み込むファイルには Schemeコードのみが許されます(例えばdefine-libraryフォームや 他のライブラリ宣言フォームはだめです)。

include-library-declarations宣言はinclude宣言と 同じように動作しますが、読み込まれるファイルの中身はSchemeコードではなく ライブラリ宣言として解釈されます。

cond-expand宣言もGaucheのそれと同じです。 機能条件式参照。 但し、define-libraryの直下で使われた場合は、 展開結果もライブラリ宣言になっている必要があります。


Next: , Previous: , Up: ライブラリモジュール - R7RS統合   [Contents][Index]