初回の起動でしか実行されないフックを作成したい - lisp-cookbook-ja/common-lisp GitHub Wiki
初回の起動時に、自分自身を削除するbeforeメソッドを作成することにより可能です。
(defmethod foo ()
(write-line "foo")
(values))
(defmethod foo :before (&aux (me #'foo))
;; フック
(write-line "***only once***")
;; 自身を削除
(remove-method me (find-method me '(:before) '() )))
(foo)
;-> ***only once***
; foo
;
;=> No value
(foo)
;-> foo
;
;=> No value
(foo)
;-> foo
;
;=> No value