をあなたの特定の質問に答えるために仮定:リロードすることにより、あなたは再びこれを評価場合という
(defconstant +old-plus+ (fdefinition '+))
(defun + (&rest args) (apply +old-plus+ args))
注意(例えば、 +old-plus+
が新しい+
に暗黙的に再定義される可能性があります(またはエラーが発生するか、警告が表示される可能性があります)。元の+
の定義が失われます。
したがって、(未テスト)より良いアプローチが隠されているすべてのシンボルが+
以外のCL
から輸入されている新しいパッケージを作成し、代わりにCL
のパッケージを使用することであろうと思わ:
(rename-package "COMMON-LISP" "COMMON-LISP-ORIGINAL")
(make-package "COMMON-LISP")
(use-package "COMMON-LISP-ORIGINAL" "COMMON-LISP")
(shadow "+" "COMMON-LISP")
(do-external-symbols (s "COMMON-LISP-ORIGINAL")
(export (find-symbol (symbol-name s)) "COMMON-LISP"))
(defun common-lisp::+ (&rest args) (apply #'common-lisp-original:+ args))
コードを処理できるようになりました。
rename-package
から既存の"COMMON-LISP-ORIGINAL"
までの場合は、「結果は未定義」なので、上記のコードを2回読み込まないでください。
出典
2013-03-28 21:23:49
sds