2008年1月2日水曜日

Chapter 2 Lather, Rinse, Repeat: A Tour of the REPL

Choosing a Lisp Implementation

Lisp処理系の紹介。aclと決めているので。


Getting Up and Running with Lisp in a Box

Emacsの紹介。
SLIMEの紹介。
Lisp in a Box の紹介。

日頃はAllegroのelispモジュールを使っているが、本に合わせるということでSLIMEを使ってみようと思う。
そこで、Lisp in a Boxのページへ。Win用はモジュール化されているが、Linuxはtar玉。

LinuxはUbuntuで構築しているため、あまり環境を汚したくないからpass。emacsまでtar玉で入れられても困る。
WinでLisp in a Boxを試す。
FranzからWin用のfree express editionを取得。インストール。
しかし、Lisp in a BoxのAllegro用モジュールインストーラがそれを認識できず、モジュールが入らない。
試しにclispモジュールをいれてみると、こちらはそのまま入る。

さて、どうしようか。

Common Lispなので、clispでも大差ないと思うが、今回はAllegroを堪能したいという思いもあるので、Linux上に自前で、acl + emacs + SLIMEの環境を構築することにする。

見るべきは、ここ。
http://www.franz.com/emacs/slime.lhtml

ubuntuのパッケージであるか?
$ aptitude search slime
$
ない。では、ソースから。asdf-installはやめておく。ubuntuのパッケージ管理との兼ね合いを検討の上、別途導入是非を決める。
今はCVSから。って、cvs日頃使っていないのでaptitudeで入れる。後はfranzのガイド通り。

使い方メモ。
M-x slime REPLバッファ起動
M-x slime-mode バッファをslime-modeに。

詳しい使い方はSLIMEホームページ。
http://common-lisp.net/project/slime/


Free Your Mind: Interactive Programming

用語の整理。
REPLにて、処理系は、Lisp expressionsをreadし、それをthe rules of Lispによって、evalする。
evalした結果をprintする。
ここで使うREPL環境は、the top-level, the top-level listener, the Lisp Listenerなどと呼ばれる。


Experimenting in the REPL

REPLをいじる。


CL-USER> 10
10
CL-USER> (+ 2 3)
5
CL-USER>


ひとつめ。the Lisp readerが"10"というテキストを読み込み、数字の10をrepresentingなa Lisp objectを生成する。
このobjectは、a self-evaluating objectなので、それをevaluatorが処理すると、自分自身が返る。
それが、printerに渡されて、printerがテキスト"10"を表示する。

ふたつめ。the Lisp readerが"(+ 2 3)"というテキストを読み込み、Lisp objectsを生成する。どういうobjectsかは、ここでは割愛して、後の章でS expressionsが出てきたところ(出てくるだろう)でやる。ざっくりいうと、+はa symbolであり、2と3はnumbersでり、このS式は、+として定義された関数(obj)に引数2と3(objs)を与えているということになる。
続いて、evaluatorは、2と3を評価して、2と3を得て、評価した結果を+とともに評価して、5を得る。
printerは5を受け取って、表示する。


"Hello, World" Lisp Style


CL-USER> "hello, world"
"hello, world"
CL-USER> (format t "hello, world")
hello, world
NIL
CL-USER>


ひとつめ。Numberと同様にStringもself-evaluatingなLisp objects。readerが読み込むときの形とprinterが書き出す形が同じ。
いわゆるread/print equivalence。

Lisp系をやったことが無い人は、何をごちゃごちゃと、と思うかもしれませんが、Lispではこのあたりの概念と用語をしっかりと確認することが重要(であるとSchemeの経験から思う)。なので、ここから入っているこの本はよいと思う。

ふたつめ。副作用(a side effect)による出力。every expression in Lisp evaluates to some result. であり、formatはNILを返す。

この後、defunを導入してこの節終了。


Saving Your Work

SLIMEを使ってみる。

C-cC-qでslime-close-parens-at-pointが起動しない。というかこの関数自体がないような? obsoleteになったのか? いつか調べる。
C-cC-c、C-cC-zはきく。

quitじゃなくて、sayoonaraでもいいんだ。SLIMEに日本の開発者が入ってるのかなぁ。

0 件のコメント: