(defun cache-result (fun &rest args) (let (res runp) (lambda () (unless runp (setq res (apply fun args) runp t)) res)))