#:g1: cl-difflibの紹介

Posted 2014-10-23 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の297日目です。

cl-difflibとはなにか

 cl-difflibは、John Wiseman氏作のPythonのdifflibのCommon Lisp版です。

パッケージ情報

パッケージ名cl-difflib
Quicklisp
CLiKiCLiki: CL-DIFFLIB
Quickdocscl-difflib | Quickdocs
CL Test Grid: ビルド状況cl-difflib | CL Test Grid

インストール方法

(ql:quickload :cl-difflib)

試してみる

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

 Pythonのdifflibそのままの名前ではありませんが、大体対応するものは同じ名前になっているようです。

に対応するのは、大体

位でしょうか。

(difflib:unified-diff *standard-output*
                      '("one" "two" "three" "four" "five" "six")
                      '("one" "three" "four" "seven" "six")
                      :test-function #'equal)
;>>  ---  
;>>  +++  
;>>  @@ -1,6 +1,5 @@
;>>   one
;>>  -two
;>>   three
;>>   four
;>>  -five
;>>  +seven
;>>   six
;=>  <no values>

(difflib:context-diff *standard-output* '("one" "two" "three" "four" "five" "six") '("one" "three" "four" "seven" "six") :test-function #'equal) ;>> *** ;>> --- ;>> *************** ;>> *** 1,6 *** ;>> one ;>> - two ;>> three ;>> four ;>> ! five ;>> six ;>> --- 1,5 ---- ;>> one ;>> three ;>> four ;>> ! seven ;>> six ;=> <no values>

(difflib:get-close-matches (string 'multiple-value-bind) (mapcar #'string (*:list-external-symbols :alexandria))) ;=> ("MULTIPLE-VALUE-PROG2" "MULTIPLE-VALUE-COMPOSE")

(difflib:get-close-matches (string 'list) (mapcar #'string (*:list-external-symbols :alexandria))) ;=> ("DOPLIST")

(difflib:quick-similarity-ratio (make-instance 'difflib:sequence-matcher :a "abcd" :b "bcde" :test-function #'equal)) ;=> 3/4

使い方も大体同じです。

まとめ

 今回は、cl-difflibを紹介してみました。
他の言語のライブラリをCommon Lispに移植したものの一覧もいつか作ってみたいですね。

comments powered by Disqus