История изменений
Исправление monk, (текущая версия) :
(defstruct thunk f)
(defun feval (x)
(if (thunk-p x) (funcall (thunk-f x)) x))
(defun fand (&rest args)
(cond
((null args) t)
((feval (car args)) t)
(t (apply #'fand (cdr args)))))
(defmacro thunk (&body body)
`(make-thunk :f (lambda () ,@body)))
(defun sum (x y) (+ x y))
(defun sum2 (x y) (+ (feval x) (feval y)))
(defun wrap (f1 f2 f3 data)
(mapcar #'apply (list f1 f2 f3) (list data data data)))
(defvar lst '(1 2))
(print (wrap #'sum #'sum2 #'fand lst))
Исходная версия monk, :
(defstruct thunk f)
(defun feval (x)
(if (thunk-p x) (funcall (thunk-f x)) x))
(defun fand (&rest args)
(cond
((null args) t)
((feval (car args)) t)
(t (apply #'fand (cdr args)))))
(defmacro thunk (&body body)
`(make-thunk :f (lambda () ,@body)))
(defun sum (x y) (+ x y))
(defun sum2 (x y) (+ (feval x) (feval y)))
(defun wrap (f1 f2 f3 data)
(mapcar #'apply (list f1 f2 f3) (list data data data)))
(defvar lst '(1 2))
(print (wrap sum sum2 and lst))