#:g1: sexp-diff.pltの紹介

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

(LISP Library 365参加エントリ)

 LISP Library 365 の94日目です。

sexp-diff.pltとはなにか

 sexp-diff.pltは、Vincent St-Amour氏作のS式の差分を見るためのライブラリです。

パッケージ情報

パッケージ名sexp-diff.plt
PLaneTPLaneT Package Repository : PLaneT > stamourv > sexp-diff.plt

インストール方法

(require (planet stamourv/sexp-diff:1:0))

でOKです。

試してみる

 ドキュメントはPLaneT参照のこと

 非常にシンプルな内容でsexp-diffのみです。使い方も簡単。

(sexp-diff
 '(defun fib (n)
   (if (< n 2)
       n
       (+ (fib (1- n))
          (fib (- n 2)))))
 '(defun fib (n)
   (if (< n 2)
       n
       (+ (fib (- n 1))
          (fib (- n 2))))))
;=> '((defun
;     fib
;     (n)
;     (if (< n 2) n (+ (fib (#:new - #:old 1- n #:new 1)) (fib (- n 2))))))

差分の箇所の前に#:newや#:oldで印が付けられるという形式になっています。

 Common Lispだったら、#:new等を#+newに置き換えたりすれば、何か応用ができそうな形式です。

(let ((*features* (cons :new *features*)))
  (car
   (read-from-string  
    "((defun
   fib
   (n)
   (if (< n 2) n (+ (fib (#+new - #+old 1- n #+new 1)) (fib (- n 2))))))")))
;=>  (DEFUN FIB (N) (IF (< N 2) N (+ (FIB (- N 1)) (FIB (- N 2)))))

(let ((*features* (cons :old *features*))) (car (read-from-string "((defun fib (n) (if (< n 2) n (+ (fib (#+new - #+old 1- n #+new 1)) (fib (- n 2))))))"))) ;=> (DEFUN FIB (N) (IF (< N 2) N (+ (FIB (1- N)) (FIB (- N 2)))))

まとめ

 今回は、sexp-diff.pltを紹介してみました。
何かに応用できそうなライブラリです。S式を扱うツールはもっと出てきて欲しいですね。

comments powered by Disqus