#:g1: clos-diffの紹介

Posted 2014-04-02 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の93日目です。

clos-diffとはなにか

 clos-diffは、Krzysztof Drewniak氏作のクラスオブジェクトの差分を取得したりするライブラリです。

パッケージ情報

パッケージ名clos-diff
Quicklisp
CLiKihttp://cliki.net/clos-diff
Quickdocshttp://quickdocs.org/clos-diff

インストール方法

(ql:quickload :clos-diff)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 どういう風に使うのかいまいち謎ですが、無限の可能性が感じられます。
差分をリスト形式として取得するDIFFと、差分をパッチできるAPPLY-DIFFの二つの関数がメインです。

(defclass dial ()
  ((a :initarg :a) 
   (b :initarg :b)
   (c :initarg :c)))

(defvar *a* (make-instance 'dial :a 0 :b 1 :c 2)) (defvar *b* (make-instance 'dial :a 0 :b 10 :c 20))

(describe *a*) ;>> #<DIAL {1025461863}> ;>> [standard-object] ;>> ;>> Slots with :INSTANCE allocation: ;>> A = 0 ;>> B = 1 ;>> C = 2 ;>> ;=> <no values>

(describe *b*) ;>> #<DIAL {10254C9863}> ;>> [standard-object] ;>> ;>> Slots with :INSTANCE allocation: ;>> A = 0 ;>> B = 10 ;>> C = 20 ;>> ;=> <no values>

(clos-diff:diff *a* *a*) ;=> (DIAL)

(clos-diff:diff *a* *b*) ;=> (DIAL (CLD::SV B 10) (CLD::SV C 20))

(clos-diff:apply-diff (clos-diff:diff *a* *b*) *a*) ;=> #<DIAL {1025461863}>

(describe *a*) ;>> #<DIAL {1025461863}> ;>> [standard-object] ;>> ;>> Slots with :INSTANCE allocation: ;>> A = 0 ;>> B = 10 ;>> C = 20 ;>> ;=> <no values>

まとめ

 今回は、clos-diffを紹介してみました。
こういうライブラリの応用を色々考えてみるのも乙かなと思いました。

comments powered by Disqus