Function APPLY

UP


Function APPLY

Function APPLY

構文

apply function &rest args+ => result*

引数と戻り値

function - 関数指定子
args - 広げられる引数リスト指定子
result - functionの返却値

定義

functionargsで実行します。

function&rest経由で引数を受け取るとき、 実装はrestパラメーターに、 applyの最後の引数で共有されている構造のオブジェクトを、 束縛することが許されています (ただし要求されているわけではありません)。 関数はそれがapply経由か、 あるいはapplyの最後の引数が定数で呼び出されかどうかを 検出できないため、 適合するプログラムは、 restのリスト構造が新しいコンスであることに頼ってはいけませんし、 またそのリスト構造を修正してもいけません。

例文

(setq f '+) =>  +
(apply f '(1 2)) =>  3
(setq f #'-) =>  #<FUNCTION ->
(apply f '(1 2)) =>  -1
(apply #'max 3 5 '(2 7 3)) =>  7
(apply 'cons '((+ 2 3) 4)) =>  ((+ 2 3) . 4)
(apply #'+ '()) =>  0

(defparameter *some-list* '(a b c))
(defun strange-test (&rest x) (eq x *some-list*))
(apply #'strange-test *some-list*) =>  implementation-dependent

(defun bad-boy (&rest x) (rplacd x 'y))
(bad-boy 'a 'b 'c) has undefined consequences.
(apply #'bad-boy *some-list*) has undefined consequences.
(defun foo (size &rest keys &key double &allow-other-keys)
  (let ((v (apply #'make-array size :allow-other-keys t keys)))
    (if double (concatenate (type-of v) v v) v)))
(foo 4 :initial-contents '(a b c d) :double t)
   =>  #(A B C D A B C D)

影響

なし。

例外

なし。

参考

funcall, fdefinition, function, 3.1. 評価, 5.1.2.5. APPLYのplaceフォーム

備考

なし。


TOP, Github