1

私は Lisp の初心者で、スキルを向上させるためにさまざまなことを試しています。CLOS の補助メソッドや Elisp のアドバイス パッケージのように、既存の関数をラップするマクロを作成して、これらの関数の前後のフォームを設定できるようにしたいと考えています。コードを動的にラップする trace 関数の機能に興味をそそられました。

これどうやってするの?

私は SBCL を使用しており、この質問の目的上、これを行う「正しい」方法にはあまり関心がなく、Lisp トリック バッグに追加していることに注意してください。

4

1 に答える 1

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)))))
于 2011-03-23T18:22:26.167 に答える