[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
@deffn
コマンドと他の定義コマンド(definition commands)で,
関数,変数,マクロ,コマンド,ユーザーオプション,スペシャルフォーム,そ
してその他の一様な書式での人工物のようなものを記述可能になります.
Infoファイルでは,定義は構成要素のカテゴリ -- `関数',`変数',またはあ
らゆるもの -- を定義の最初の行の始めに現し,構成要素の名前と引数が続き
ます.印刷されたマニュアルでは,コマンドはTeXに構成要素の名前とその引
数を左端のマージンに印刷させ,カテゴリを次に右端のマージンに印刷させます.
両方の出力形式で,定義の本体は字下げされます.また,構成要素の名前は適切
な索引に入ります.@deffn
は関数の索引に名前が入り,@defvr
は変数の索引に入る等のようになります.
マニュアルは,与えられた名前に対し一つ以上の定義は不要で含めるべきではあ
りません.概要を含む付録は,定義コマンドより@table
を使用すべきで
す.
15.1 定義のテンプレート | How to structure a description using a definition command. | |
15.2 オプションと繰り返しの引数 | How to handle optional and repeated arguments. | |
15.3 二つ以上の`最初の'行 | How to group two or more `first' lines. | |
15.4 定義コマンド | All the definition commands. | |
15.5 定義を書くための慣習 | Conventions for writing definitions. | |
15.6 関数定義の見本 |
@deffn
コマンドは,関数に似ている構成要素の定義に使用されます.
@deffn
コマンドで定義を書くために,@deffn
コマンドを行の最
初に書き,同じ行に構成要素のカテゴリ,構成要素自身の名前と,(存在する場
合は)引数を続けてください.そして,続く行に定義の本体を書いてください.
(本体に例を埋め込むこともできます.)終りに,単独行に書かれた@end
deffn
コマンドで定義を終えてください.(他の定義コマンドも同じ書式が続き
ます.)
定義のテンプレートは以下のようになります.
@deffn category name arguments... body-of-definition @end deffn |
例えば,以下のようにします.
@deffn Command forward-word count このコマンドは,ポイントを@var{count}語前に(または,@var{count}が 負の場合は後ろに)移動します....@end deffn |
以下を生成します.
- Command: forward-word count
- このコマンドは,ポイントをcount語前に(または,countが負の場 合は後ろに)移動します....
タイトルのようなカテゴリ名は大文字にしてください.`Interactive Command' といった文節のようにカテゴリ名に空白が含まれている場合,周りにカッコを書 いてください.例えば以下のようにします.
@deffn {Interactive Command} isearch-forward ... @end deffn |
そうしない場合,二番目の単語は構成要素の名前と誤解されます.
定義コマンドには,それ以外に一般的なものもあります.例えば,
@deffn
コマンドは関数やそれに似たもの -- 引数を取る構成要素 --
に対する一般的な定義コマンドです.このコマンドを使用するときは,構成要素
が属するカテゴリを指定すべきです.@deffn
コマンドには,三つの既に
定義されている専門的な変種の,@defun
,@defmac
,そして
@defspec
を処理し,それらはカテゴリを指定します.それぞれ"関数",
"マクロ",そして"スペシャルフォーム"です.(Lispではスペシャルフォー
ムは関数に似た構成要素です.) @defvr
コマンドも,変数の特定の種類
を記述するため専門分野に相違のあるものとして,前もって定義されたものがあ
ります.
@defun
のような専門的に定義されているものに対するテンプレートは,
カテゴリを指定する必要が無い以外,一般の定義のテンプレートに似ています.
@defun name arguments... body-of-definition @end defun |
このため以下のようにします.
@defun buffer-end flag この関数は@var{flag}が1より小さい場合@code{(point-min)}を返し,そ れ以外では@code{(point-max)}を返します.... @end defun |
以下を生成します.
- Function: buffer-end flag
- この関数はflagが1より小さい場合
(point-min)
を返し,それ以外 では(point-max)
を返します....
定義の内部に@example
の使用を含んでいる関数定義の詳細な例は,
See section A Sample Function Definition.
それ以外の特別なコマンドは,@defun
のように動作します.
実装が困難なため,@deffn
内部とそれ以外のすべての定義コマンドの内
部にあるマクロは展開されないことに注意してください.
オプションや繰り返しの引数を取る構成要素もあり,それは角カッコと丸カッコ を使用する特有なglyphで指定されているかもしれません.例えば,スペシャ ルフォームは,引数リストを簡単な関数より複雑な方法で分けられた引数に区切 ることもよくあります.
角カッコで囲まれた引数はオプションです.このため[optional-arg]のよ うな文節は,optional-argがオプションだということを意味します.丸カッ コに続く引数はオプションで,一度以上繰り返すこともできます. このため,repeated-args...は0以上の引数を意味します.いくつか の引数がLispのリスト構造の追加のレベルにまとめられるとき,カッコが使用さ れます.
想像上のスペシャルフォームの例の@defspec
の行は以下のようになります.
- Special Form: foobar (var [from to [inc]]) body...
この例では,引数fromとtoがオプションですが,両方とも有るか両 方とも無いことが必要です.それらが有る場合,incも同様にオプション で指定してかまいません.これらの引数はbodyと分けるため,リストに引 数varでまとめられ,それは形式の残りの全ての要素を含みます.
Texinfoソースファイルでは,この@defspec
行は以下のように書かれま
す(この例のように二行以上には分割されません).
@defspec foobar (@var{var} [@var{from} @var{to} [@var{inc}]]) @var{body}@dots{} |
関数はコマンドと変数の索引で`foobar'の下にリストアップされます.
定義に対し二つ以上の`最初の'またはヘッダ行を作成するため,最初の
@deffn
行に@deffnx
で始まる行を続けてください.
@deffnx
コマンドは,その行と前の行の間に余分な縦方向の空白を生成
しない以外,@deffn
と同じように動作します.
例えば以下のようにします.
@deffn {Interactive Command} isearch-forward @deffnx {Interactive Command} isearch-backward この二つの検索コマンドは似ていて... @end deffn |
以下を生成します.
それぞれの定義コマンドには`x'が付きます.@defunx
,
@defvrx
,@deftypefunx
などです.
`x'の形式は@itemx
と全く同じように動作します.@itemx
を参照してください.
Texinfoは1ダース以上の定義コマンドを提供していて,それらの全てをこのセ クションで記述します.
定義コマンドは自動的に構成要素の名前を適切な索引に入れます.例えば,
@deffn
,@defun
,そして@defmac
は関数の索引に関数
名を入れます.@defvr
と@defvar
は変数の索引に変数名を入れ
ます.
以下のほとんどの例はLispの例ですが,コマンドは他のプログラミング言語でも 使用可能です.
15.4.1 関数とそれに類似した構成要素 | Commands for functions and similar entities. | |
15.4.2 変数とそれに類似した構成要素 | Commands for variables and similar entities. | |
15.4.3 型のある言語の関数 | Commands for functions in typed languages. | |
15.4.4 型のある言語の変数 | Commands for variables in typed languages. | |
15.4.5 オブジェクト指向プログラミング | Commands for object-oriented programming. | |
15.4.6 データの型 | The definition command for data types. |
このセクションは関数やそれに類似した構成要素の記述のためのコマンドを記述 します.
@deffn category name arguments...
@deffn
コマンドは,関数,対話式コマンド,そして引数を取る類似の構
成要素のための一般的な定義コマンドです.定義されている構成要素のカテゴリ
を記述する用語を選択する必要があります.例えば,"関数"は,構成要素が関
数の場合使用されます.@deffn
コマンドは,行の最初に,同じ行に記述
する構成要素のカテゴリ,この特定の構成要素の名前,そして,存在する場合そ
の引数を続けます.単独行の@end deffn
で定義を終了してください.
例えば,定義を以下のようにします.
@deffn Command forward-char nchars ポイントを@var{nchars}文字前に移動します. @end deffn |
これは,一つの引数ncharsを持つforward-char
という名前の"コマ
ンド"の,どちらかというと簡潔な定義を表示します.
@deffn
は,ncharsのような引数名を@var
が使用されてい
るかのようにイタリックまたは大文字で印刷し,それは,これらの名前がメタ構
文変数と考えるためです -- それは実際の引数の値を意味します.記述のテキ
ストで引数の値を述べるため,明示的に@var
で引数名を書いてください.
上記の例では,このように`@var{nchars}'を使用しています.
@deffn
のテンプレートは以下のとおりです.
@deffn category name arguments... body-of-definition @end deffn |
@defun name arguments...
@defun
コマンドは関数に対する定義コマンドです.@defun
は,
`@deffn Function ...'と同じです.例えば,以下のようにします.
@defun set symbol new-value シンボル@var{symbol}の値を@var{new-value}に変更します. @end defun |
これは,引数がsymbolとnew-valueの関数set
の,どちらか
というと簡潔な定義を表示します.@defun
行の引数名は,@var
で囲まれているかのように自動的にイタリックまたは大文字で現れます.単独行
の@end defun
で定義を終了してください.
テンプレートは以下のとおりです.
@defun function-name arguments... body-of-definition @end defun |
@defun
は関数索引に項目を生成します.
@defmac name arguments...
@defmac
コマンドはマクロの定義コマンドです.@defmac
は
`@deffn Macro ...'と同じで,@defun
のように動作します.
@defspec name arguments...
@defspec
コマンドは,スペシャルフォームの定義コマンドです.(Lisp
では,スペシャルフォームは関数によく似た構成要素です.see section `Special Forms' in GNU Emacs Lisp Reference Manual.)@defspec
は
`@deffn {Special Form} ...'と同じで,@defun
のように
動作します.変数とそれに類似した構成要素を定義するためのコマンドは以下のものです.
@defvr category name
@defvr
コマンドは変数のようなものの一般的な定義コマンドです --
構成要素は値を記録します.定義された構成要素のカテゴリを記述するための,
用語を選択する必要があります.例えば,"変数"は構成要素が変数の場合使用
されます.@defvr
コマンドを行の最初に書き,同じ行に構成要素のカテ
ゴリと構成要素の名前を続けてください.
タイトルのようにカテゴリ名を大文字にしてください.カテゴリ名が"User Option"のようにスペースを含む場合,カッコで囲んでください.そうしない場 合,二番目の単語は構成要素の名前だと誤解されます.例えば,以下のようにし ます.
@defvr {User Option} fill-column このバッファローカル変数は, 補充された行の最大幅を指定します. ... @end defvr |
単独行の@end defvr
で定義を終了してください.
テンプレートは以下の通りです.
@defvr category name body-of-definition @end defvr |
@defvr
はnameに対し,変数索引の項目を作成します.
@defvar name
@defvar
コマンドは,変数の定義コマンドです.@defvar
は
`@defvr Variable ...'と同じです.例えば,以下のようにします.
@defvar kill-ring ... @end defvar |
テンプレートは以下の通りです.
@defvar name body-of-definition @end defvar |
@defvar
は,nameに対し変数索引の項目を作成します.
@defopt name
@defopt
コマンドは,ユーザオプション(user options),すなは
ち,ユーザが好みで変更する変数に対する定義コマンドです.Emacsは多くのそ
のようなものがあります(see section `Variables' in The GNU Emacs Manual).
@defopt
は`@defvr {User Option} ...'と同じで,
@defvar
のように動作します.
@deftypefn
コマンドとその変形は,CやC++のような変数の型と関数を宣
言する必要がある言語の関数を記述するためのものです.
@deftypefn category data-type name arguments...
@deftypefn
コマンドは,関数と,引数を取るものや型のある類似の構成
要素の定義コマンドです.@deftypefn
は行の最初に書き,同じ行に記述
される構成要素のカテゴリ,戻り値の型,この特定の構成要素の名前と,存在す
る場合引数が続きます.例えば,以下のようにします.
@deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) ... @end deftypefn |
("..."の前のテキストは,二行で表示され,Texinfoファイルでは実際に は単一行です.)Infoでは以下を生成します.
-- Library Function: int foobar (int FOO, float BAR) ... |
これは,foobar
が"ライブラリ関数"で,それはint
を返し,引
数はfoo(int
)とbar(float
)だということを意味しま
す.
@deftypefn
で書いた引数名は,暗黙で@var
にはなりません ---
@deftypefn
の引数の実際の名前は,データ型名とキーワードで通常はバ
ラバラなので,Texinfoは助けなしに見つけることができません.代わりに,
@var
を引数名の周りに明示的に書く必要があります.上の例では,引数
名は`foo'と`bar'です.
@deftypefn
のテンプレートは以下の通りです.
@deftypefn category data-type name arguments ... body-of-description @end deftypefn |
categoryやdata typeが1単語以上の場合,単一の引数にするためカッ コで囲む必要があることに注意してください.
Adaのようなパッケージ言語のプロシージャを記述する場合,前の段落で記述さ
れている慣習と幾分反対の方法として,@deftypefn
の使用を手法として
考えるかもしれません.
例えば以下のようにします.
@deftypefn stacks private push (@var{s}:in out stack; @var{n}:in integer) ... @end deftypefn |
(@deftypefn
の引数は,三行に分割されていますが,実際のTexinfoファ
イルでは単一行になります.)
この例では,プロシージャは`プロシージャ'と分類するのではなくパッケージ
stacks
に属するものとして分類され,そのデータ型はprivate
と
して記述されます.(プロシージャの名前はpush
で,その引数はs
とnです.)
@deftypefn
はnameに対し関数索引に項目を作成します.
@deftypefun data-type name arguments...
@deftypefun
コマンドは,型のある言語の関数のための特別な定義コマ
ンドです.そのコマンドは`@deftypefn Function ...'と同じです.
このため以下のようにします.
@deftypefun int foobar (int @var{foo}, float @var{bar}) ... @end deftypefun |
Infoでは以下を生成します.
-- Function: int foobar (int FOO, float BAR) ... |
テンプレートは以下の通りです.
@deftypefun type name arguments... body-of-description @end deftypefun |
@deftypefun
はnameに対し関数索引に項目を作成します.
型のある言語の変数は,型のある言語の関数に似た方法で処理されます.
See section 15.4.3 型のある言語の関数. 一般的な定義コマンド@deftypevr
は
@deftypefn
に対応し,特別な定義コマンド@deftypevar
は
@deftypefun
に対応します.
@deftypevr category data-type name
@deftypevr
コマンドは,型のある言語の変数のようなもののための一般
的な定義コマンドです---値を記録する構成要素です.定義される構成要素のカ
テゴリを記述するための用語を選択する必要があります.例えば,"変数"は構
成要素が変数の場合使用します.
@deftypevr
コマンドは,行の最初に書かれ,同じ行に記述される構成要
素のカテゴリ,データの型,そして特定の構成要素の名前が続きます.
例えば,以下のようにします.
@deftypevr {Global Flag} int enable ... @end deftypevr |
Infoでは以下を生成します.
-- Global Flag: int enable ... |
テンプレートは以下の通りです.
@deftypevr category data-type name body-of-description @end deftypevr |
@deftypevr
は,nameに対し変数索引に項目を作成します.
@deftypevar data-type name
@deftypevar
コマンドは,型のある言語の変数のための特別な定義コマ
ンドです.@deftypevar
は`@deftypevr Variable ...'と同じ
です.例えば,以下のようにします.
@deftypevar int fubar ... @end deftypevar |
Infoでは以下を生成します.
-- Variable: int fubar ... |
テンプレートは以下の通りです.
@deftypevar data-type name body-of-description @end deftypevar |
@deftypevar
は,nameに対し,変数索引の項目を作成します.
オブジェクト指向プログラミングで使用するような,抽象的なオブジェクトに関 する記述を書式化するためのコマンドには以下のものがあります.クラスは抽象 的なオブジェクトの定義された型です.クラスのインスタンスはクラスの型を持 つ特定のオブジェクトです.インスタンス変数はクラスに属するがそれぞれのイ ンスタンスが独自の値を持つ変数です.
定義では,クラス名はクラスに対するプログラミングシステムで本当に定義され
た名前の場合,@code
をその周りに書くべきです.そうしない場合,通
常のテキストフォントで印刷されます.
@defcv category class name
@defcv
コマンドは,オブジェクト指向プログラミングで,クラスに関連
する変数に対する一般的な定義コマンドです.@defcv
コマンドは三つの
引数をとります.定義している事柄のカテゴリ名,属するクラス,そしてその名
前です.このようにします.
@defcv {Class Option} Window border-pattern ... @end defcv |
これは,Window
クラスのborder-pattern
クラスオプションの定義
の最初の行の書き方を説明しています.
テンプレートは以下の通りです.
@defcv category class name ... @end defcv |
@defcv
は変数索引に項目を作成します.
@defivar class name
@defivar
コマンドは,オブジェクト指向プログラミングのインスタンス
変数に対する定義コマンドです.@defivar
は`@defcv {Instance
Variable} ...'と同じです.テンプレートは以下の通りです.
@defivar class instance-variable-name body-of-definition @end defivar |
@defivar
は変数索引に項目を作成します.
@deftypeivar class data-type name
@deftypeivar
コマンドは,オブジェクト指向プログラミングの型を付け
られたインスタンス変数に対する定義コマンドです.それは,@defivar
に,インスタンス変数の型を指定するためのdata-typeパラメータが付い
たものに似ています.@deftypeivar
は変数索引に項目を作成します.
@defop category class name arguments...
@defop
コマンドは,オブジェクト指向プログラミングのメソッドに似た
構成要素に対する定義コマンドです.これらの構成要素は関数のように引数を取
りますが,オブジェクトの特定のクラスに関連付けされています.
例えば,メソッドとしてクラスに関連付けされているラッパー(wrappers)
と呼ばれる概念を持つシステムもありますが,それは関数というよりマクロのよ
うに動作します.@defop Wrapper
をこれらの一つとしての記述に使用す
ることが可能です.
メソッドとオペレーション(operations)を分けた方が便利なときもありま
す.オペレーションをメソッドの詳述と考えることができます.このため,ウィ
ンドウシステムは全てのウィンドウクラスがexpose
と言う名前のメソッ
ドを持つことを指定できます.我々は,このウィンドウシステムが一般的なウィ
ンドウ上にexpose
オペレーションを定義していると言っているのです.
特に,オペレーションは名前を持ち,引数のパターンも指定されています.全て
のオペレーションを実装したメソッドは,オペレーションで使用されるアプリケー
ションが実装したメソッドを知ることなくそれを行うので.同じ引数を受け入れ
るようにする必要があります.
メソッドよりオペレーションを説明した方がより意味があることもよくあります.
例えば,ウィンドウアプリケーション開発者は,expose
オペレーション
を知っている必要がありますが,与えられたウィンドウのクラスが,このオペレー
ションを実装した独自のメソッドを持つかどうかを考慮する必要はありません.
このオペレーションを記述するため以下のように書きます.
@defop Operation windows expose |
@defop
コマンドは,行の最初に書かれ,同じ行にオペレーションのカテ
ゴリの全体的な名前,オペレーションクラスの名前,オペレーションの名前,そ
して,存在する場合その引数を続けます.
テンプレートは以下の通りです.
@defop category class name arguments... body-of-definition @end defop |
@defop
は`expose
on windows
'のような項目を,関数索
引に作成します.
@deftypeop category class data-type name arguments...
@deftypeop
コマンドは,オブジェクト指向プログラミングの型付のオペ
レーションに対する定義コマンドです.それは@defop
に,メソッドの戻
り値を指定するdata-typeパラメータを加えたものに似ています.
@deftypeop
は関数索引に項目を作成します.
@defmethod class name arguments...
@defmethod
コマンドは,オブジェクト指向プログラミングのメソッドに
対する定義コマンドです.メソッドは特定のオブジェクトのクラスとそのサブク
ラスのためのオペレーションを実装する関数のようなものです.
@defmethod
は`@defop Method ...'と同じです.コマンドは
行の最初に書かれ,メソッドのクラス名,メソッド名,そして存在する場合はそ
の引数が続きます.
例えば,以下のようにします.
@defmethod |
これは,クラスbar-class
のbar-method
と呼ばれるメソッドに対
する定義を説明しています.メソッドは引数を取ります.
テンプレートは以下の通りです.
@defmethod class method-name arguments... body-of-definition @end defmethod |
@defmethod
は,関数索引に`bar-method
on bar-class
'
のような項目を作成します.
@deftypemethod class data-type name arguments...
@deftypemethod
コマンドは,C++やJavaのようなオブジェクト指向の型
のある言語のメソッドのに対する定義コマンドです.それは,
@defmethod
コマンドにメソッドの戻り値を指定するための
data-typeパラメータを追加したものに似ています.
データの型に対するコマンドには以下のものがあります.
@deftp category name attributes...
@deftp
コマンドは,データの型に対する一般的な定義コマンドです.そ
のコマンドは行の最初に書かれ,同じ行にカテゴリ,型の名前(int
や
float
のようなもの),そして型のオブジェクトの属性名が続きます.こ
のため,このコマンドをint
やfloat
を記述するために使用するこ
とが可能で,その場合,カテゴリとしてdata type
を使用することも可能
でしょう.(データの型は,実行可能なオペレーションを決定する目的に対する,
特定のオブジェクトのカテゴリです.)
例えばLispでは,pairは特定のデータの型に名前を付け,その型のオブジェ
クトはCARとCDRと呼ばれる二つのスロットを持ちます.pair
の定義の最初の行を書く方法は以下のようになります.
@deftp {Data type} pair car cdr ... @end deftp |
テンプレートは以下の通りです.
@deftp category name-of-type attributes... body-of-definition @end deftp |
@deftp
はデータの型の索引に項目を作成します.
@deffn
,@defun
やその他の定義コマンドの一つを使用し定義を
書くとき,forward-word
関数に対するcount引数のように,意味を
示す引数の使用に注意してください.また,integerのように引数名が型
名を含んでいる場合,引数が実際にその型であるよう注意してください.
関数定義は,@defun
と@end defun
を使用します.関数名は
@defun
コマンドの直後に続き,同じ行にパラメータリストが続きます.
section `Calling Functions' in The GNU Emacs Lisp Reference Manualの 定義には以下のものがあります.
- Function: apply function &rest arguments
apply
はargumentsでfunctionを呼び出し,funcall
に似ていますが,一点が異なります.argumentsの終りは, function に与えられる単一の引数ではなく引数のリストです.我々は, このリストが他の引数にappendされるとも言っています.
apply
はfunction呼び出しの結果を返します.funcall
のよ うに,functionはLisp関数やプリミティブ関数である必要があります.ス ペシャルフォームとマクロは,apply
では意味がありません.
(setq f 'list) => list (apply f 'x 'y 'z) error--> Wrong type argument: listp, z (apply '+ 1 2 '(3 4)) => 10 (apply '+ '(1 2 3 4)) => 10 (apply 'append '((a b c) nil (x y z) nil)) => (a b c x y z)
apply
を使用した興味深い例は,mapcar
の記述で見付かります.
Texinfoソースファイルでは,この例は以下のようになります.
@defun apply function &rest arguments @code{apply}は@var{arguments}で@var{function}を呼び出し, @code{funcall}に似ていますが,1点異なります.@var{arguments}の終り は,@var{function}に与えられた単一の引数ではなく引数のリストです.我々 は,このリストが他の引数に@dfn{加えられる}とも言っています. @code{apply}は@var{function}呼び出しの結果を返します. @code{funcall}のように,@var{function}はLisp関数やプリミティブ関数 である必要があります.スペシャルフォームとマクロは,@code{apply}では 意味がありません. @example (setq f 'list) @result{} list (apply f 'x 'y 'z) @error{} Wrong type argument: listp, z (apply '+ 1 2 '(3 4)) @result{} 10 (apply '+ '(1 2 3 4)) @result{} 10 (apply 'append '((a b c) nil (x y z) nil)) @result{} (a b c x y z) @end example @code{apply}を使用した興味深い例は,@code{mapcar}の記述で見付かり ます. @end defun |
このマニュアルでは,この関数はapply
の下のコマンドと変数索引にリス
トアップされています.
通常の変数とユーザーオプションは,変数が引数を取らない以外,関数に対する ものに似た書式を使用し記述されます.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |