For Development HEAD DRAFTSearch (procedure/syntax/module):

1.2 表記について


1.2.1 項目の形式

このマニュアルでは、各項目は次のようなフォーマットで表記されています。

カテゴリ: foo arg1 arg2

[spec]{module} fooの説明

カテゴリ は項目fooの種別を示します。 次のようなカテゴリがあります。

FunctionScheme手続き
Special Form特殊形式 (R7RSでは「構文」)
Macroマクロ
Moduleモジュール
Classクラス
Generic Functionジェネリックファンクション
Methodメソッド
Reader Syntaxリーダによって解釈される構文要素
Parameterパラメータ。動的束縛を実現するオブジェクト。 詳しくはパラメータと動的状態参照。
Dynamic state動的状態。動的スコープで状態を切り替えるプロトコルに従う手続きです。 詳しくはパラメータと動的状態参照。
Generic applicationGaucheでは、手続きでないオブジェクトをあたかも手続きのように 引数に「適用」することができます(詳しくは適用可能なオブジェクトを参照してください)。 このエントリは、オブジェクトが引数に適用された時のふるまいを説明します。
Subprocess argumentこれはdo-processrun-processのキーワード引数の 説明で使われます (サブプロセスの実行参照)。
EC QualifierこれはSRFI-42の先行評価的内包表記(Eager Comprehension)における qualifierの説明に使われます (srfi.42 - 先行評価的内包表記)参照。

手続き、特殊形式、マクロに関しては、エントリの後に引数の仕様が示されます。 引数リストの中には次のような表記が現れることがあります。

arg …

ゼロ個以上の可変個の引数。

:optional x y z
:optional (x x-default) (y y-default) z

省略可能な引数の表記。この例では3つまでの省略可能な引数が取られることを示します。 2番目の形式ではxyについて省略された場合の既定値も示しています。 この形式の引数表記は、Schemeに対するGaucheの独自拡張です。 完全な仕様については手続きを作るを参照してください。

:key x y z
:key (x x-default) (y y-default) z

キーワード引数の表記。この例ではxyzの3つのキーワード引数を 取ることが示されます。2番目の形式ではxyについて省略された場合の 既定値も示しています。 この形式の引数表記も、Schemeに対するGaucheの独自拡張です。 完全な仕様については手続きを作るを参照してください。

:rest args

残りの引数全てがリストになってargsに束縛されることを示します。 この形式の引数表記も、Schemeに対するGaucheの独自拡張です。 完全な仕様については手続きを作るを参照してください。

項目の行に続いて、もし項目が特定の標準に準拠している場合はその標準が示され、 また項目が組み込みでない場合はその項目を提供するモジュールが示されます。

標準は角括弧でくくって表示されます。以下の標準があります。

[R7RS], [R7RS library]

R7RSで定義されています。このエントリが手続き、構文、マクロについてものならば、 libraryも合わせて示されます。これは、 その名前がscheme.libraryモジュール (R7RS用語では、(scheme library)ライブラリ) からエクスポートされてていることを示します。

[R7RS+], [R7RS+ library]

R7RSで定義されていますが、Gauche独自の拡張(より多くの省略可能引数を受け付けたり、 異なる型の引数についても動作したりなど)があります。 説明部分で、R7RSからどう拡張されているかが記述されます。 ポータブルなプログラムを書いている時は、Gauche独自拡張の機能を使わないように 注意してください。

[R6RS], [R6RS+], [R5RS], [R5RS+]

R6RSやR5RSで定義されています。 プラス記号がついている場合は、Gauche独自の機能が追加されていることを示します。

R7RSはほぼR5RSの上位互換であり、R6RSとも多くの機能を共有しているので、 R5RS、R6RSの表示はそれらがR7RSに含まれていない場合のみ記されます。

[SRFI-n], [SRFI-n+]

この項目はSRFI-nに定義されるように動作します。 "[SRFI-n+]"とマークされている場合は SRFI-nの仕様に上位互換な形で追加の機能が実装されていることを示します。

[POSIX]

この項目はPOSIXのAPIを反映していることを示します。

モジュールは{}内に示されます。モジュールが示されていない項目は、 Gaucheの組み込みです。(R7RSコードを書いている場合、Gaucheの組み込みは (gauche base)モジュールで提供されます。 詳しくはgauche.base - Gauche組み込み関数のインポート参照)。

項目によっては、再エクスポートやモジュール継承によって、 複数のモジュールから提供されるものもあります。 その場合、元になるモジュールが示されます。

例として、実際のエントリのひとつはこんな具合です:

 -- Function: utf8->string u8vector :optional start end
     [R7RS base] {gauche.unicode} Converts a sequence of utf8 octets in
     U8VECTOR to a string.  Optional START and/or END argument(s) will
     limit the range of the input.

これは、関数utf8->stringはR7RSで定義され、 ライブラリ(scheme base)にある名前となっており、 Gaucheではもともとgauche.unicodeモジュールで提供されている、ということを示します。 実際に使う場合は、どちらからインポートしても構いません。 一般的には、R7RSコードを書いている時には(import (scheme base))を、 Gaucheコードを書いている時には(use gauche.unicode)を使うと良いでしょう。 R7RSとGaucheでの作法の違いについてはR7RS統合を参照してください。


1.2.2 名前と名前空間

R6RSから、Schemeプログラムのトップレベル定義を複数の名前空間に分けて 書くことができるようになりました。Schemeの言語標準では名前空間を ライブラリと呼んでいます。GaucheはR6RSより前から名前空間を サポートし、モジュールと呼んできました。本マニュアルでは 従来どおりモジュールという呼称を使います。

(註: RnRSライブラリは、厳密に言えばGaucheのモジュールよりも抽象的な概念です。 RnRSでは処理系がライブラリを様々な方法で実装できるように規定しています。 Gaucheではたまたま、モジュールという仕組みを使ってRnRSライブラリのの概念が 実現されているということです。ポータブルなR7RSライブラリを書く時は、 Gauche特有のモジュールのセマンティクスに依存しないように気をつけてください。 特に、RnRSライブラリはGaucheのモジュールよりも静的です。 例えばRnRSの規格内では、既に存在するライブラリに定義を追加することはできません。)

時に、同じ名前に対して異なるモジュールで別々の定義が与えられることがあります。 それらを区別する必要がある時は、本マニュアルでは名前の前にモジュール名と ハッシュ記号をつけて表記します。例えば、gauche#lambdagaucheモジュールで定義されたlambdaを指します。 これはあくまで説明のための表記で、 ソースコードにgauche#lambdaと書けるわけではないことに 注意してください。



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT