LINUX.ORG.RU

История изменений

Исправление 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))