Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2011-03-20

CMU AIレポジトリ探検 (2) Source Compare

| 10:59 | CMU AIレポジトリ探検 (2) Source Compare - わだばLisperになる を含むブックマーク はてなブックマーク - CMU AIレポジトリ探検 (2) Source Compare - わだばLisperになる

かれこれ20年程前のCMUでは、CLでポータブルに利用できる開発ツールがないことをどうにかしようというLisp-Utilitiesというプロジェクトがあったようです。

Symbolicsや、XeroxのLISPマシンでは当時でも色々揃っており、開発ツール自体がなかった訳ではないので処理系を跨いでポータブルであることが主眼だった様子。

Mark Kantrowitz氏が中心人物のようで、

CMU-CS-91-143

Portable Utilities for Common Lisp: User Guide & Implementation Notes

Mark Kantrowitz

May 1991

74 pages

というレポートに6つのツールの内容が纏められています(自分もどこから拾ってきたのか分かりませんが、現在はダウンロードできるリンクがみつけられませんでした)

上記のレポートによれば、このプロジェクトの成果物は一式でダウンロードできるようですが、現在まとまってダウンロードできるところは消滅している様子。

しかし探してみるとCMUのAIリポジトリでそれぞれのツールが単体で配布されていることをみつけました。

今回は、その内の一つであるSource Compareについてです。

内容は、このリンクから分かると思いますが、所謂diffです。

(sc:source-compare "cadr78/lispm2/let.lisp.1" "cadr99/sys2/let.lisp.1")

のようにすると、

===========================================================================
Source compare of cadr78/lispm2/let.lisp.1 with cadr99/sys2/let.lisp.1
===========================================================================
14c14
**** File cadr78/lispm2/let.lisp.1, After "(remprop 'let* 'source-file-name)"
< (defmacro let (pairs . body)
<        (do ((pairs pairs (cdr pairs))
---
**** File cadr99/sys2/let.lisp.1, After "(remprop 'let* 'source-file-name)"
> (defmacro let (pairs &body body)
>        (do ((pairs pairs (cdr pairs))
===========================================================================
115c115
**** File cadr78/lispm2/let.lisp.1, After "(defun let-macro-hair (pattern code cell)"
< (defmacro let* (pairs . body)
<        (do ((a (reverse pairs) (cdr a))
---
**** File cadr99/sys2/let.lisp.1, After "(defun let-macro-hair (pattern code cell)"
> (defmacro let* (pairs &body body)
>        (do ((a (reverse pairs) (cdr a))
===========================================================================
Done.

のように結果が出力されます。

LISPのコメントを無視できたりしてLISPフレンドリーなのが長所でしょうか。(オプションで挙動を変更できます)

ちなみに、同じファイルをdiff -uすると、

diff -u cadr78/lispm2/let.lisp.1 cadr99/sys2/let.lisp.1
--- cadr/lispm2/let.lisp.1       2009-01-03 09:28:22.000000000 +0900
+++ cadr99/sys2/let.lisp.1       2009-01-03 14:37:00.000000000 +0900
@@ -1,4 +1,4 @@
-;;;-*- Mode: Lisp; Package: System-Internals -*-
+;;;-*- Mode:LISP; Package:SYSTEM-INTERNALS; Base:8 -*-

 ;; Destructuring DEFUN must be added to this at some point.

@@ -11,7 +11,7 @@
 (remprop 'let 'source-file-name)
 (remprop 'let* 'source-file-name)

-(defmacro let (pairs . body)
+(defmacro let (pairs &body body)
        (do ((pairs pairs (cdr pairs))
            (vars nil)
            (let-macro-vals nil)
@@ -112,7 +112,7 @@
               (let-macro-get-last-var (car pattern))
               (let-macro-get-last-var (cdr pattern))))))

-(defmacro let* (pairs . body)
+(defmacro let* (pairs &body body)
        (do ((a (reverse pairs) (cdr a))
            (b body `((let (,(car a)) . ,b))))
           ((null a)

こんな感じになります。

紹介ついでに、ASDF対応にして、githubにアップしてみました。

適切な場所に、

git clone git://github.com/g000001/source-compare.git

すれば、

;; quicklisp
(ql:quickload :source-compare)

できると思います。

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20110320