トップ «前の日記(2008-07-02) 最新 次の日記(2008-07-05)» 編集

Route 477



2008-07-03

[lisp] 「家庭では真似しちゃダメ!Edmund Weitzが選ぶ黒帯マクロ3選」

CL勉強会@Lingrで参考書になってたらしい The Power of LISP Macrosを見てみたのですが…。

;;; 10. Don't try this at home
;;; --------------------------
;;;
;;; Macros for black belts

;;; - "On Lisp" <http://www.paulgraham.com/onlisp.html>
;;; - Screamer <http://www.cl-user.net/asp/libs/screamer>
;;; - Series <http://series.sourceforge.net/>
;;; - Iterate <http://common-lisp.net/project/iterate/>

ちょwwwなにこの章wwww

4274066371

"On Lisp"はまあ、装丁がかっこいい本として(俺の中で)有名なアレですが、その他のプロジェクトは知らなかったのでちょっと調べてみましたよ。

1. Screamer

Common Lispで非決定性計算を行う(シミュレートする)ためのライブラリ。バックトラックと、Undo可能な副作用をサポートする。

2. Series

Seriesはシーケンスに似たデータ構造で、シーケンスと同じような操作を提供する。Seriesの操作は関数的に書けるが反復的に実行されるので、関数的だが効率の良いコードが書ける。

KBEmacsの実装に使われたらしい。

3. Iterate

IterateはLOOPマクロに似ているが、

  • 拡張しやすくて、
  • (LOOPマクロよりLispの構文に近いので) エディタに優しく、
  • ANSIのCL仕様に含まれていない(良くも悪くも)。

だそうな。

  (iter (for i from 1 to 10)
        (collect i into nums)
        (collect (sqrt i) into nums)
        (finally (return nums)))

こんな感じらしい

というわけで

黒帯マクロ使いを目指す皆様はソースに目を通してみるといいんじゃないでしょうか。 とりあえずscreamer.lsp のdefun-compile-timeの大群が恐ろしいです。