次: , 前: Format of Descriptions, 上: Format of Descriptions


1.3.7.1 関数の記述例

関数の記述では、まず始めに説明対象の関数名があります。 同じ行には、引数名の並びも続きます。 これらの名前は、説明文の中で引数の値を参照するために使います。

引数ならびにキーワード&optionalが現れていれば、 それ以降の引数を省略できることを示します(省略した引数の値はnil)。 関数を呼び出すときに&optionalを書いてはいけません。

キーワード&rest (このあとには1つの引数名だけが続く)は、 残りの引数が何個でもよいことを示します。 直後にある1つの引数名は、変数としての値を持ち、 その値は残りのすべての引数のリストです。 関数を呼び出すときに&restを書いてはいけません。

では、仮想的な関数fooの記述を以下に示します。

— 機能: foo integer1 &optional integer2 &rest integers

関数fooは、integer2からinteger1を引き算し、 残りのすべての引数を減算結果に加える。 integer2を指定しないと、デフォルトでは、数19から引き算する。

          (foo 1 5 3 9)
               => 16
          (foo 5)
               => 14
     

より一般的には、つぎのとおり。

          (foo w x y...)
          ==
          (+ (- x w) y...)
     

integerinteger1bufferなどの)型名を名前とする引数は、 その型の値であると仮定します。 (buffersのように)型を複数形にした場合には、 しばしば、その型のオブジェクトのリストを意味します。 objectという名前の引数は、任意の型でかまいません。 (Emacsオブジェクトの型の一覧については、see Lisp Data Types)。 (new-fileなどの)その他の名前の引数は、関数の説明文の中で言及します。 複数の関数の引数に共通する特徴について、 節の始めで説明する場合もあります。

&optional&restについての詳しい説明は、 See Lambda Expressions

コマンド、マクロ、スペシャルフォームの記述も同じ形式ですが、 「関数」のかわりに 「コマンド」、「マクロ」、「スペシャルフォーム」のいずれかです。 コマンドは、対話的に呼び出せる単なる関数です。 マクロは関数とは違った方法で引数を処理します(引数を評価しない)が、 同じ方法で引数を記します。

スペシャルフォームの記述では、省略可能な引数や繰り返される引数を 示すために、より複雑な記法を使います。 というのは、引数並びを個々の引数に分離する方法が複雑だからです。 `[optional-arg]'は、 optional-argが省略可能であることを示します。 また、`repeated-args...'は、0個以上の引数を示します。 いくつかの引数をリスト構造の内側にまとめるときには、 括弧を使います。

— 特殊型: count-loop (var [from to [inc]]) body...

この仮想的なスペシャルフォームは、 フォーム群bodyを実行してから変数varを増やすことを 反復するループを実現する。 最初は、変数の値はfromである。 以降の反復では、変数を1(あるいは、指定があればincだけ)増やす。 vartoに等しくなると、 bodyを実行せずにループから抜ける。 例を示す。

          (count-loop (i 0 10)
            (prin1 i) (princ " ")
            (prin1 (aref vector i))
            (terpri))
     

fromtoを省略すると、 ループ開始前にvarnilを束縛し、 各反復の開始時にvarnil以外であるとループから抜け出る。

          (count-loop (done)
            (if (pending)
                (fixit)
              (setq done t)))
     

このスペシャルフォームでは、引数fromtoは省略できるが、 両者を同時に指定するか、同時に省略すること。 これらを指定した場合、incを指定してもよい。 これらの引数は、引数varとともにリストにまとめる。 これはbodyと区別するためであり、 bodyは残りのフォームの要素すべてを含む。