ラベル Lisp の投稿を表示しています。 すべての投稿を表示
ラベル Lisp の投稿を表示しています。 すべての投稿を表示

2013/03/23

Land of Lisp 10章のシミュレーション

画像は Land of Lisp 10 章で作るシミュレーションの世界にて100万日が経過した状態。

遺伝子とエネルギーを持った動く動物が、草と森がある世界で動きまわって食事をし、無性生殖で繁殖する世界のシミュレーション。動物は遺伝情報に従い特定の動きを見せ、動くことでエネルギーを消費する。草を食べることでエネルギーを補充、繁殖でエネルギーを大幅に消費、エネルギーが足りないと繁殖できない、エネルギーが切れると死ぬ、というもの。

ライフゲームも似たようなもんだよね。

プログラムの大部分は本に載っているCommon Lispのコードと翻訳者であるshiroさんが公開されているGaucheによるコードを基に、少し改造していくつかの条件をパラメータで渡せるコマンドにしてみたもの。

パラメータをいじって30万日くらい動かすと結果が違って楽しい。動作はコマンドを実行してEnterを押すごとに世界が1日進む。300000などの数値を打ち込んでEnterを押すとその分日数が経過する。


さて、読んでいてよくわからなかったのが、P.202の turn 手続きで移動方向を決める部分。説明を読んでもいまいち意味がわからなかった。angle 手続きを呼び出す辺り。angle の定義はこれ。

(define (angle genes x)
  (let1 xnu (- x (car genes))
    (if (< xnu 0)
        0
        (+ 1 (angle (cdr genes) xnu)))))

自分なりに書きなおしてみたのはこれ。

(define (angle genes x)
  (let rec ((genes genes)(x x)(acc 0))
    (let1 xnu (- x (car genes))
      (if (< xnu 0)
          acc
          (rec (cdr genes) xnu (+ acc 1))))))

angle 手続き事態は難しくないけど、これを使って何をやってるのかがわからなかった。

angle の仕事は、引数 x を基に、引数 genes(リスト)から一つ要素を選び、選ばれた要素のインデックスを返すこと。例えば、genes が (1 1 10 5 2 1 1 1) だった場合、合計が22なので x は0〜21のランダムな数値(angle を呼び出す側で決められる)で束縛される。angle の評価結果として出現する頻度が最も高いのが2、次が3、その次が4。

絵に書くとこんな感じか。絵の上の行の数値が x 、下が選択される要素。

今この絵を描いていて思いついたけど、以下のようなリストからランダムに選ぶのと同じってことだな。

(use srfi-27)
(let1 genes '(1 1 10 5 2 1 1 1)
  (apply append
         (map (^(g i)
                (iota g i 0))
              genes
              (iota (length genes)))))
;; => (0 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 4 4 5 6 7)

ということで、angle 手続きは下記のようなものでも良いということか。

(define (angle genes x)
  (~ (apply append
            (map (^(g i)
                   (iota g i 0))
                 genes
                 (iota (length genes))))
     x))

余談

これ、条件をちゃんと考えたら「ライフメーカーの掟」のプロローグ部分(ロボットがバグって進化し始める)のシミュレーション作れるんじゃないの。 (「ロボットがバグって進化し始める」っていう説明ではすごくちゃちなものに聞こえてしまうな。これをホーガン氏が書くとどえらい壮大なことになるんだよなあ。) このシミュレーションプログラムを有性生殖にして工場を作るだけでも近いものになりそうだな、という話。


2012/01/02

2011年lisp/scheme/gaucheピックアップ

これと同じノリで。 これは2012年ですが。 ピックアップと言いながらほとんど載ってるかも。

gauche





初めての人のためのLISP[増補改訂版]

2012/01/01

2012年が明けたので書き初めしました。lispで。

明けましておめでとうございます。書き初めしました。lisp(というかscheme(というかgauche))で。辰年なので図形言語でドラゴン曲線を描くべきかとも思いましたが書き初めにしました。元ネタはこちら




参考

参考にしたのはこちら
Gauche-gdは仕事でも使っていたので、一部流用しつつ。

使い方

コマンドにしたので、下記のように使えます。
フォントはここと同じものにしました。
gauche 0.9.2以降で動きます。最後の「あけおめ」のように別のfontでもOK。
$ kakizome "吾唯足知" "ばるばろう" /home/valvallow/.fonts/opentype/aoyagireisyosimo/aoyagireisyosimo.otf | hd -C | less
すると以下のような出力が得られるので、> hoge.pngとかして下さい。
00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|
00000010  00 00 00 7a 00 00 01 60  08 02 00 00 00 fb 01 fa  |...z...`........|
00000020  fa 00 00 20 00 49 44 41  54 78 9c ed 9d 7f 4c 1b  |... .IDATx....L.|
00000030  e7 fd c7 ef eb b8 8e 71  5c 8f b8 ae eb 52 87 7a  |.......q\....R.z|
00000040  0c b9 1e 75 19 a2 8c 51  ea 52 46 a9 85 18 65 cc  |...u...Q.RF...e.|
00000050  65 14 a1 34 62 94 b2 88  a1 2c c9 a2 8c a1 28 42  |e..4b....,....(B|
00000060  34 5f 84 22 14 21 c4 88  47 29 63 0c 65 0c 51 44  |4_.".!..G)c.e.QD|
00000070  29 a5 94 22 0f 21 ca 18  63 d4 73 29 61 8e 87 98  |)..".!..c.s)a...|
00000080  71 88 e3 38 84 3a ae 63  8c 89 bf 7f dc b7 de f5  |q..8.:.c........|
...
..
.

こんな感じで
$ kakizome "吾唯足知" "ばるばろう" /home/valvallow/.fonts/opentype/aoyagireisyosimo/aoyagireisyosimo.otf > temp/hoge.png ; eog temp/hoge.png
ソースは以下の通り。

関連


2011/12/24

emacs lispのplist

これを見て初めて知りました。 elispにもcl同様にplistがあったんですね。しかも変数/関数とは別にバインドできるアレが。(あ、でもこれはcl packageのお陰なのかな?そこまで調べる気は起きなかったり)
*** Welcome to IELM ***  Type (describe-mode) for help.
ELISP> (get 'hoge :foo)
nil
ELISP> (get 'hoge :bar)
nil
ELISP> (setf (get 'hoge :foo) 100)
100
ELISP> (setf (get 'hoge :bar) 200)
200
ELISP> (get 'hoge :foo)
100
ELISP> (get 'hoge :bar)
200
ELISP> hoge
*** Eval error ***  Symbol's value as variable is void: hoge
ELISP> (setq hoge 'aaaaaaaaaaa)
aaaaaaaaaaa
ELISP> hoge
aaaaaaaaaaa
ELISP> (defun hoge (x) x)
hoge
ELISP> (hoge "hoge")
"hoge"
ELISP> (hoge "hello, world !!")
"hello, world !!"
ELISP> (symbol-value 'hoge)
aaaaaaaaaaa
ELISP> (symbol-function 'hoge)
(lambda
  (x)
  x)

ELISP> (symbol-plist 'hoge)
(:foo 100 :bar 200)

ELISP> (symbol-name 'hoge)
"hoge"
ELISP> (symbol-package 'hoge)
*** Eval error ***  Symbol's function definition is void: symbol-package
ELISP> 
twitterで教えてもらったけど、Common Lispのsymbolって5つもスロットあったのか(笑)変数/関数にplistの3つかと思ってた。その点schemeは良し悪しは別としてすごくシンプル。
Emacs Lispテクニックバイブル

2011/12/02

クリスマスツリーを飾りました。Lispで。

もうすぐクリスマスなのでterminalにクリスマスツリーを飾りました。
Lisp(というかScheme(というかGauche 0.9.1以降))で書きました。
和田先生の去年の記事を参考に・・・。

$ christmas-tree -size 6 -color


ソースはこちら。毎度よろしくコマンドにしました。色付けが若干間違ってるのはご愛嬌ということで。


lispギャグ

リリカル☆LispとかマンガでわかるLispの中の人が。


LispやSchemeはいつもAdvent Calendarないですねー。

クリスマスネタとか新年ネタ探そ。
クリスマスツリーは去年見かけて、真似して書きかけたのがある。
書き初めは、仕事で書いたgauche製の画像レンダラがあるのでできそう。ってか普通にGauche-gdだけでいいか。


渾身のlispネタ


初めての人のためのLISP[増補改訂版]

2011/11/21

On Lisp

公開再開だそうです。

On Lisp

2011/04/12

日記(Scheme/Lisp とか、DSL とか)

近頃、Scheme(Gauche) で DSL を書くお仕事をしています。domain specific language のあれです。先日までは、Gauche で JSON を使って PostgreSQL とやり取りする CGI な API を書くお仕事をしていました。(主に設計面と進捗的なとこでボツりましたけどね。。面目なさ過ぎて涙目 orz)

現在お世話になっている会社にて、「言語は Scheme でも Common Lisp でも、他のなんでも好きなものを使って良いよ。」という素敵なお話で、Scheme を選びました。Lisp が好きな身としてはすごく幸せな環境です。(windows 環境であれば C# を選らんだと思いますが。)

ただ。私のような下級戦士にとっては仕事で Scheme を使うというのは、それが例え Gauche であっても茨の道だということを実感しました。春ですね。

というのは、Scheme や Lisp という言語がパワフルかどうかとは関係ないところで困るんです。ユーザーが少な過ぎるんだと思います(他国では違うのかも?TIOBE Software: Tiobe Index)。ユーザーが少ないということは、ググっても情報(ある意味"答え")が出てこないんです。「こういう方法で解決した」「こうやったら、こうなった」「これをこう使ったら、結果こうなった」というような情報もすごく少ないです。あっても「入れてみた」「使ってみた」「試してみた」がほとんどです。なので自ら、"考えること"、"試してみる必要のあること"が多くなります。結果的に他の言語でググったり、他の言語のドキュメントを読んだりしなければならなくなります。この状況にアンビバレントな感情を抱かざるを得ません。仕事では時間を無制限に使うわけにはいきませんよね。ググって「あーこれでできるんだ。(ちゃちゃっ!終)」とはなりません。

弱音でしょうか、いいえゆとりです。ただ、これってプログラミングとしてはすごく楽しいんですよね。Lisp は書くこと自体楽しいですし。その点は幸せです。

で、急に「ダイの大冒険」の話です。大魔王バーンが使う「光魔の杖」ってありましたよね。簡単に言えば「理力の杖」を超強力にしたもの、ってロン・ベルクが言ってたあれです。理力の杖は、魔力を打撃力に替えることで攻撃力が上がるんですが、これは誰が使ってもだいたい同じくらいの攻撃力になるわけです。光魔の杖は、その上限がなくて、魔力が強ければ強いほど攻撃力が無限に上がるんです。Lisp って、光魔の杖だと思うんですよね。既に高い技術を持ったプログラマが更なる自由とパワーを得ることができる言語。でも私が使ってもせいぜい理力の杖なんじゃないかと。

本題

今やってる DSL については、画像処理系の DSL です。「できたら、BSD ライセンスか何かで公開しちゃえば?」とのことなので、そういうこともあるかもです。
  • DSL とはインターフェースである
  • DSL とは極限まで抽象化した API である
  • DSL のデザインとは、API のデザインである
こういうことを、見たり聞いたりしました。ホントそうだなと思います。API デザイン力(というか抽象化能力)が高くないと、いくらパワフルで DSL 定義が得意と言われてる言語(つまり Lisp のことですが)を使っても意味がないと感じています。当たり前っちゃ当たり前ですよね。

で、いろいろ読んだりするわけです。そのメモ。Martin Fowler 先生は DSL の本(Domain-Specific Languages (Addison-Wesley Signature Series (Fowler)))まで出してるんですね。確かにリファクタリング(リファクタリング―プログラムの体質改善テクニック (Object Technology Series))の一つの極地の様な気もします。

DSL 本関連。


Scheme で DSL といえば
などを思い浮かべます。でもよく考えてみれば、On Lisp でも LOL(LET OVER LAMBDA Edition 1.0) でも PAIP(実用 Common Lisp (IT Architects’Archive CLASSIC MODER)) でもほとんどが DSL と呼べるようなものばかりだったじゃないですか。私は一体何を読んできたんだろう。。

あ、直接関係ないけど、見かけたのでメモ。Monads in Scheme の和訳みたいです。


そして、DSL といえば、リトル言語。リトル言語といえば UNIX 。UNIX に憧れを持ち始めたこの頃。

Domain-Specific Languages (Addison-Wesley Signature Series (Fowler))

2010/12/28

今年の3冊

本続きで。

3冊選んでみた

貧困大国アメリカは2冊セットで。
  1. 「ジェンダー論」の教え方ガイド―女子大生のための性教育とエンパワーメント (フェミックスブックレット (1))
  2. 数学入門〈上〉 (岩波新書)
  3. ルポ 貧困大国アメリカ (岩波新書)
「ジェンダー論」の教え方ガイド―女子大生のための性教育とエンパワーメント (フェミックスブックレット (1))数学入門〈上〉 (岩波新書)ルポ 貧困大国アメリカ (岩波新書)ルポ 貧困大国アメリカ II (岩波新書)

「ジェンダー論の教え方ガイド」は、今年のはじめの方に読んだけど印象に残ってる。こういう授業は必須じゃないかなぁ・・・。「数学入門」は @shunsuk さんからすすめられて読んだ。中学か高校、せめて十代で読みたかった。。でも読んでよかった。「貧困大国アメリカ」は夢中で読んだ。アメリカ怖いよアメリカ。

技術書3冊

というか Lisp 本3冊。
  1. 実用 Common Lisp (IT Architects’Archive CLASSIC MODER)
  2. On Lisp
  3. LET OVER LAMBDA Edition 1.0
実用 Common Lisp (IT Architects’Archive CLASSIC MODER)On LispLET OVER LAMBDA Edition 1.0

先生!僕にもマクロが読み書きできるようになりました!

伝統的マクロと衛生的マクロ(syntax-rules に限る)をある程度読み書きできるようになった(上記の本に syntax-rules は出てこないけど)。これはやっぱり今でも Lisp でしか体験できない抽象かもしれないので、悟り体験に含まれるのかも。つか悟り体験ってなんなんだろ。

賛否両論あるだろうけどマクロは他の言語にも輸入した方が良いと思う。S 式じゃなければ Lisp マクロほどの強力なマクロを用意するのは難しいのかもしれないにしても。(脱線)

PAIP は読みやすい・わかりやすい・おもしろい・重い・厚い。On Lisp は後半難しかったけど、丁寧で読みやすかった。ただし、ある程度 Lisp を読み書きできないと序盤からきついのかも。コードがきれい。Let Over Lambda が一番ぶっ飛んでた。文章もマクロも。オレオレマクロ TUEEEEE !
The Little Schemer, 4th Edition も好きで、待望の和訳本も出たけど、原書を読んだのは去年なので選ばず。

Scheme手習い

2010/11/08

quine : 自分自身を出力するプログラム

クワイン(英: Quine)は、コンピュータプログラムにおけるメタプログラミングの一形態であり、自身の完全なソースコードだけを出力するプログラムである。
だそうです。

quine というものを初めて目にしたのはこれでした。
((lambda (x)
   `(,x ',x))
 `(lambda (x)
    `(,x ',x)))
でもこれ↑実行すると評価されちゃってて自身のソースコードを出力してないんじゃぁ・・・。(ソースの転載ミスでした)

そういえば、LOL(LET OVER LAMBDA Edition 1.0) にもありました。
* (let ((let '`(let ((let ',let))
                 ,let)))
    `(let ((let ',let)) ,let))

(LET ((LET '`(LET ((LET ',LET))
               ,LET)))
  `(LET ((LET ',LET)) ,LET))

この方のプロフィール欄とか。
((lambda (lambda) `((lambda (lambda) ,lambda) ',lambda)) '`((lambda (lambda) ,lambda) ',lambda))

検索してみたらこんなページがありました。
(call/cc
 (lambda (c)
   (call/cc
    (lambda (cc)
      (c ((lambda (c)
            `(call/cc
              (lambda (c) (call/cc (lambda (cc) (c (,c ',c)))))))
          '(lambda (c)
             `(call/cc
               (lambda (c) (call/cc (lambda (cc) (c (,c ',c)))))))))))))
((lambda (x) `(,(reverse x) ',x)) '(`(,(reverse x) ',x) (x) lambda))

ハンパねぇ!


まぁ、だからどうということではないのですが。。

LET OVER LAMBDA Edition 1.0

2010/07/16

言語は4層に分割されるべき

言語は少なくとも4つの層に分割されるべきだ:
  1. カーネル言語は単純で実装しやすいものとなる。どんなケースにおいても、動的な再定義は再考を加えて、このレベルでのサポートが必要かどうかを判断するべきだ。私は再定義可能なものがカーネル内に必要だとは思わない。
  2. 言語を肉付けする言語学的な層。この層は実装上の困難が若干伴うかもしれない。そしてここには多分、カーネルで実装するには高価すぎるが割愛するには重要すぎる動的な側面が含まれることになる。
  3. ライブラリ。Common Lispにあるものの大半はこの層に置かれる。
  4. 環境として提供されるエピ言語的機能。

個人的な妄想ですが、純 Lisp + いくつかのプリミティブ、マクロ、リーダーマクロ、継続を用意して、残りを全部それ自身で実装して行くのって楽しそうだなーなどと思います。
ところで、純 LISP を作れば、Lisp の他の機能はすべて実装できるって話がありますけども、実際やった人いるんでしょうか。本当にできるなら、それはそれで面白そうかも。

もしかして、純 LISP で 純 LISP + α を実装して、さらにその LISP で機能追加した LISP を実装して・・・の繰り返し、ということなんでしょうか。。

実用 Common Lisp (IT Architects’Archive CLASSIC MODER)

2010/07/13

PAIP「第3部の内容を習得した読者は、上級のLispプログラマと見なしてよいだろう。」

送信者 Jennifer
とうとう買いましたー\(^o^)/熊本市内は下通りダイエーの喜久屋書店で。
第3部の内容を習得した読者は、上級のLispプログラマと見なしてよいだろう。(まえがきより)
ちなみに第5部まで25章928ページ!すげぇ厚さです・・・。

20年くらい前の本の和訳とのことです。著者の人は現在 Google のえらい人なのだとか。
よそ様の書評とか

こんなのあってるのか・・・。良いな、東京。しかしなんで404の人んち?

実用 Common Lisp (IT Architects’Archive CLASSIC MODER)

2010/06/29

Clojure カッコイイ!

おもしろいページがあったのでメモ。

以下余談

遅ればせながら、プログラミングClojure を読んでいます。頂いてから随分経ってしまいました。。Clojure カッコイイですねぇ。おもしろいです。
今5章まで読んだところですが、5章(関数型プログラミング)とてもおもしろいです。
ここまでで良いなーと思った点は
  • 関数定義のコメント
  • doc 関数
  • 同名の関数で引数の数ごとに処理を記述できる(オーバーロードとか syntax-rules っぽいなーなどと)
  • 型ヒント
  • なんでもシーケンス
  • なんでも遅延シーケンス
  • Java の呼び出しが自然 (「S式で書ける Java」といった印象)
そういえば、多値とか継続はないっぽい?

やっぱり気になる。。といった点は
  1. 引数ベクタで[]しか使えない
  2. cond や let の括弧が少ない
両方とも好みの問題だと思います。1 は見る分には慣れてきました。書く時はやはり()で書けた方が好きです。2 は相変わらず見づらいです。でも両方とも大して気になりません。


プログラミングClojure

2010/06/20

なんで Lisp/Scheme の変数名は長いの?

そういえば。さっきの記事を書き終わって思い出しました。shiro さんがこんなことを仰っていた。
Lisp/Schemeの変数名が長くなりがちなのは、変数名にしか読者への情報を乗せられないということもあるな。静的型なら型名に情報を乗せて、変数名自体は一文字でもけっこういける。
だが型情報だけが乗せたい情報というわけでもない。とすれば一般的にメタ情報を乗せる仕組みをつくればいいか?
Clojureのmetaはそういう仕組みではあるな。
なるほどー。

ところで Clojure の meta ってなんだろ。プログラミングClojure P.54 の「メタデータ」のところのことかな。せっかく頂いたのにまだ読んでいない・・・。

追記

長いシンボルを補完できるエディタがあったからだと思います RT @valvallow: なんで Lisp/Scheme の変数名は長いの? http://ff.im/-moAHF

@wasabiz それもあるけど、組み込み関数の命名とかさ。Common Lispは「クソ長い」の。AT&TのC文化圏では「命名は短く」ってのがあって、それはテキストエディタで打つとメンドくせえし間違えるから。CLは関数名を「自動補完で記述する」前提があるんですよ。


追記


プログラミングGaucheプログラミングClojure

On Lisp 読了

ようやく LET OVER LAMBDA Edition 1.0 に引き続き On Lisp を読み終わりました。これが初級者向けってホントですか。前半はまー、確かにそうでしょうけども。。Lisp 怖い。


個人的におもしろかったのは、
  • Paul Graham 節
  • 前半の入門的なところ
  • ユーティリティ関数のところ
    • コードがキレイ
    • こういう風にユーティリティを書いていけば良いのかー。
  • マクロの導入的なところ
    • 「マクロとはこういうものだ」というのが随所に書かれていて、丁寧でわかりやすい
    • できること、できないこと、長所、短所、デバッグ方法、ハマりどころ
    • やっぱりマクロは難しいんだ
    • 「こうやって書いていけば良いよ」
  • アナフォリックマクロ
    • カッコイイ
  • 非決定性
    • とてもわかりやすい
  • CLOS
    • 言うほど異色じゃなくね?(ほんの少ししか紹介されていなかったからかも)
  • 付録のパッケージのところ
    • パッケージややこしそう。
でしょうか。

継続の実装のところは少し期待を裏切られました。あとATN コンパイラと Prolog のところは完全に置いていかれました。

コードがキレイですごく見やすかったです。お手本にしたいコード(当たり前か)。私は先に LET OVER LAMBDA Edition 1.0 を読みました。LOL もすごくおもしろかったのですが内容的にもコード的にも読むのに負荷が高かったです。On Lisp を先に読んだ方が良いのではないかと思います。


On LispLET OVER LAMBDA Edition 1.0

「最終的には Prolog を 94 行で実装した.」

Web 版にはないと思われますが、P.393以降の「後注」に以下の様なことが書かれています。
最終的には Prolog を 94 行で実装した. それには以前の章から 90 行分のユーティリティを持ってきて使っている. ATN コンパイラにはさらに 33 行を追加したので, 217 行になる. ただし Lisp の言語仕様上では行という概念が無いので, Lisp プログラムの長さを行数で図ると誤差が大きいことに注意.
最後の一文。
ただし Lisp の言語仕様上では行という概念が無いので, Lisp プログラムの長さを行数で図ると誤差が大きいことに注意.
そうですよね。。ならどんな単位で測ると良いんでしょうね。

そういえば、「Lisp は S/N 比が高いので・・・」どうのこうの、というようなことを良く見聞きしますが、S/N 比ってなんなんでしょう?
ノイズが少ないってことなんですかね。


On Lisp の後注がおもしろいですね。Yコンビネータが出てきたり、SICP(計算機プログラムの構造と解釈)が出てきたりします。Paul Graham は自分のやってる VC の名前を「Y Combinator」にしたり、SICP の原書にレビューしてたりと、きっと両方共好きなんでしょうね。SICP 原書のレビューの方には、最近話題(と、言っても原書は20年前のものらしい)の実用 Common Lisp (IT Architects’Archive CLASSIC MODER) の著者 Peter Norvig 氏もレビューしてますね。

On Lisp

2010/06/06

Lisp/Scheme 読み物、メモ、よくわからないけど後で読む

Lisp関連の翻訳もの多数

社長がSchemerらしい。採用情報のページがなんかすごい。

Schemeのマクロ、継続関連。

コンパイラとか3impとか。

雑記

また探しに行ってみたけど、熊本の本屋さんには 実用 Common Lisp (IT Architects’Archive CLASSIC MODER) は置いてねぇーわ・・・。
ちょっと立ち読みしてみたいんだけどなぁ・・・。

実用 Common Lisp (IT Architects’Archive CLASSIC MODER)

2010/05/31

熊本市内の本屋さんに「実用 Common Lisp」がなかった

今日、私の知る限りで最も品揃えの良い熊本市内の本屋さん2件を回ってみましたが、実用 Common Lisp (IT Architects’Archive CLASSIC MODER) は置いてませんでした・・・orz

「私の知る限り」なんて言わなくても、熊本市内で品揃えの良い2件と言ったら、三年坂のツタヤとダイエーのキクヤですね、はい。

ついでに、プログラミング言語SCHEMEビューティフルコード を立ち読んだら、欲しくなりました・・・。

後者は、scheme の syntax-case が載っている25章だけでも良いので欲しいなー。などと Twitter でつぶやいたら、PDF(英語)を教えて頂きました!ありがとうございます!

前者は、英語版が Web 上に公開されているので、チラ見してみます。

Web 上には、無料で読めるものが他にもたくさんあるしなー・・・。実用 Common Lisp (IT Architects’Archive CLASSIC MODER) は、また今度で良いかなー・・・。いや、立ち読んでみたいだけだったんだ。


ビューティフルコード実用 Common Lisp (IT Architects’Archive CLASSIC MODER)プログラミング言語SCHEMEThe Scheme Programming Language, 4th Edition