といいつつ役に立たない関数を定義する関数(マクロ)を。
(defmacro define-futility (fname args &rest body) `(defun ,fname ,args (prog1 (progn ,@body) (fset (quote ,fname) nil)))) (define-futility useless1 () (+ 1 1)) (useless1) 2 (useless1) #=> Debugger entered--Lisp error: (void-function useless1) (define-futility useless2 (a) (* 2 a)) (useless2 3) 6 (useless2 3) #=> Debugger entered--Lisp error: (void-function useless2)
関数を定義できるが、その関数が実行されると自分自身を削除する関数にする。
しかしその関数が実行されていないという情報を持っているわけだから、なんか役に立つんじゃなかろうか、などと考えたり。