История изменений
Исправление theNamelessOne, (текущая версия) :
Можно попробовать и без макр обойтись:
(defparameter *functions-cache*
  (make-hash-table :test 'equalp))
(defstruct expr oper op1 op2)
(defun build (info)
  (aif (gethash info *functions-cache*)
       it
       (setf (gethash info *functions-cache*)
               (lambda ()
                 (funcall (expr-oper info)
                          (expr-op1 info)
                          (expr-op2 info))))))В любом случае, логика будет похожая.
Исходная версия theNamelessOne, :
Можно попробовать и без макр обойтись:
(defparameter *functions-cache*
  (make-hash-table :test 'equalp))
(defstruct expr oper op1 op2)
(defun build (info)
  (aif (gethash info *functions-cache*)
       it
       (setf (gethash info *functions-cache*)
               (lambda ()
                 (funcall (expr-oper info)
                          (expr-op1 info)
                          (expr-op2 info))))))