関数定義は,@defunと@end defunを使用します.関数名は
@defunコマンドの直後に続き,同じ行にパラメータリストが続きます.
Calling Functionsの 定義には以下のものがあります.
— 機能: 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の下のコマンドと変数索引にリス
トアップされています.
通常の変数とユーザーオプションは,変数が引数を取らない以外,関数に対する ものに似た書式を使用し記述されます.