, FUNCTION:
(FUNCTION )
QUOTE FUNCTION . :
#f Û (FUNCTION f)
, , quote. quote -, . , , . , . ( ) , (-) .
FUNCTION. . , - :
>(defun add(x)
(function (lambda (y) (+ x y))))
ADD
>(setq add3 (add 3)); x = 3
#<Closure SPECIAL::APPLY-INTERPRETED-CLOSURE...>
>(funcall add3 5); y = 5
, .
. , , . :
>(power-of-2-generator)
>(power-of-2-generator)
>(power-of-2-generator)
...
:
(defvar *previous-power* 1)
(defun power-of-2-generator ()
(setf *previous-power* (* 2 *previous-power*)))
, , , power-of-2-generator , *previous power* .
? . . . , :
(defun make-power-of-2-generator (previous-power)
#'(lambda ()
(setf previous-power (* previous-power 2))))
, previous-power.
>(setf g1 (make-power-of-2-generator 1))
#<Closure SPECIAL::APPLY-INTERPRETED-CLOSURE...>
>(setf g2 (make-power-of-2-generator 10))
#<Closure SPECIAL::APPLY-INTERPRETED-CLOSURE...>
>(funcall g1)
>(funcall g2)
>(funcall g1)
>(funcall g2)
>(funcall g1)