Next: , Up: Format of Descriptions   [Contents][Index]


1.3.7.1 A Sample Function Description

関数の記述では、関数の名前が最初に記述されます。同じ行に引数の名前のリストが続きます。引数の値を参照するために、引数の名前は記述の本文にも使用されます。

引数リストの中にキーワード&optionalがある場合、その後の引数が省略可能であることを示します(省略された引数のデフォルトはnilです)。その関数を呼び出すときは、&optionalを記述しないでください。

キーワード&rest(これの後には1つの引数名を続けなければなりません)は、その後に任意の引数を続けることができることを表します。&restの後に記述された引数名の値には、その関数に渡された残りのすべての引数がリストとしてセットされます。この関数を呼び出すときは、&restを記述しないでください。

以下はfooという架空の関数(function)の説明です:

Function: foo integer1 &optional integer2 &rest integers

関数foointeger2からinteger1を減じてから、その結果に残りすべての引数を加えます。integer2が与えられなかった場合、デフォルトして数値19が使用されます。

(foo 1 5 3 9)
     ⇒ 16
(foo 5)
     ⇒ 14

より一般的には、

(foo w x y…)
≡
(+ (- x w) y…)

慣例として引数の名前には、(たとえばintegerinteger1bufferのような)期待されるタイプ名が含めます。(buffersのような)複数形のタイプは、しばしばそのタイプのオブジェクトのリストを意味します。objectのような引き数名は、それが任意のタイプであることを表します(Emacsオブジェクトタイプのリストは、Lisp Data Typesを参照してください)。他の名前をもつ引数(たとえばnew-file)は、関数に固有の引数で、関数がドキュメント文字列をもつ場合、引数のタイプはその中で説明されるべきです(Documentationを参照してください)。

&optional&restにより修飾される引数の、より完全な説明は、Lambda Expressionsを参照してください。

コマンド(command)、マクロ(macro)、スペシャルフォーム(special form)の説明も同じフォーマットをもちますが、‘Function’が‘Command’、‘Macro’、‘Special Form’に置き換えられます。コマンドは単にインタラクティブに呼び出すことができる関数です。マクロは関数とは違う方法(引数は評価されません)で引数を処理しますは、同じ方法で記述されます。

マクロとスペシャルフォームにたいする説明には、特定のオプション引数や繰り替えされる引数のために、より複雑な表記が使用されます。なぜなら引数リストが、より複雑な方法で別の引数に分離されるからです。‘[optional-arg]’はoptional-argがオプションであることを意味し、‘repeated-args’は0個以上の引数を表します。カッコ(parentheses)は、複数の引数をリスト構造の追加レベルにグループ化するのに使用されます。以下は例です:

Special Form: count-loop (var [from to [inc]]) body…

この架空のスペシャルフォームは、 bodyフォームを実行してから変数varをインクリメントするループを実装します。最初の繰り返しでは変数は値fromをもちます。以降の繰り返しでは、変数は1(incが与えられた場合はinc)増加されます。vartoに等しい場合、bodyを実行する前にループをexitします。以下は例です:

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

fromtoが省略された場合、ループを実行する前にvarnilがバインドされ、繰り返しの先頭においてvarが非nilの場合は、ループをexitします。以下は例です:

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

このスペシャルフォームでは、引数fromおよびtoはオプションですが、両方を指定するか、両方を未指定にしなければなりません。これらの引数が与えられた場合、オプションでincも同様に指定することができます。これらの引数は、フォームのすべての残りの要素を含むbodyと区別するために、引数varとともにリストにグループ化されます。