|   | 
 ANSI Common Lisp    5 Data and Control Flow    5.3 Dictionary of Data and Control Flow
 
 - 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.
  
 |