ToC | DocOverview | CGDoc | RelNotes | Index | PermutedIndex
| Allegro CL

| ANSI Common Lisp 5 Data and Control Flow 5.3 Dictionary of Data and Control Flow
5.3.1 apply | Function
  Syntax: apply function `&rest` args+ {result}* Arguments and Values: function - a function designator. args - a spreadable argument list designator. results - the values returned by function. Description: Applies the function to the args. When the function receives its arguments via &rest, it is permissible (but not required) for the implementation to bind the rest parameter to an object that shares structure with the last argument to apply. Because a function can neither detect whether it was called via apply nor whether (if so) the last argument to apply was a constant, conforming programs must neither rely on the list structure of a rest list to be freshly consed, nor modify that list structure. setf can be used with apply in certain circumstances; see Section 5.1.2.5 APPLY Forms as Places. Examples:
       (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)
See Also: funcall, fdefinition, function, Section 3.1 Evaluation, Section 5.1.2.5 APPLY Forms as Places Allegro CL Implementation Details: None.

© Franz Inc. 1998-2019 - File last updated 02-07-2019