前: Def Cmd Conventions, 上: Definition Commands


15.6 関数定義の見本

関数定義は,@defun@end defunを使用します.関数名は @defunコマンドの直後に続き,同じ行にパラメータリストが続きます.

Calling Functionsの 定義には以下のものがあります.

— 機能: apply function &rest arguments

applyargumentsfunctionを呼び出し,funcall に似ていますが,一点が異なります.argumentsの終りは, function に与えられる単一の引数ではなく引数のリストです.我々は, このリストが他の引数にappendされるとも言っています.

applyfunction呼び出しの結果を返します.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の下のコマンドと変数索引にリス トアップされています.

通常の変数とユーザーオプションは,変数が引数を取らない以外,関数に対する ものに似た書式を使用し記述されます.