(defun memoize (fn)
  (let ((table (make-hash-table)))
    (lambda (x)
      (or (gethash x table)
          (setf (gethash x table) (funcall fn x))))))

;; Используется так:
(time
  (let ((fn (memoize (lambda (x) (sleep x) x))))
    (print (funcall fn 3))
    (print (funcall fn 3))))

;; Или так:
(defun yoba (x) (sleep x) x)
(setf (fdefinition 'yoba) (memoize #'yoba))

(time (progn (print (yoba 1)) 
             (print (yoba 1))))