我是Lisp的新手,我正在尝试不同的方法来提高我的技能。我想编写一个包含现有函数的宏,以便我可以在这些函数的表单之前和之后进行设置,有点像CLOS的辅助方法或者Elisp的建议包。 trace函数动态包装代码的能力引起了我的兴趣,能够自己做这件事看起来很有用。
我该怎么做?
请注意我正在使用SBCL,并且出于这个问题的目的,我对这样做的方式并不感兴趣,因为我正在添加到我的Lisp技巧包中。
答案 0 :(得分:3)
我不知道CLOS之外的任何内置支持。但你可以重新定义原始函数,如下所示:
(defmacro add-post (fun-name &body body)
(let ((orig (gensym)))
`(let ((,orig (fdefinition ,fun-name)))
(setf (fdefinition ,fun-name) (lambda (&rest args)
(apply ,orig args)
,@body)))))