Lisp勉強中(1) xyzzyでLispを勉強

Meadowのマクロを自作したりするために、Lispを勉強したい。ホントはいきなりEmacs Lispをやればいいのかも知れないけど、ちゃんと本流(?)を知っておこうということで、まずCommon Lispを勉強することにする。Common Lispがわかるようになれば、今後Emacs LispはもちろんSchemeHaskellやArcなど最近話題の言語にもついて行けそう。あとRubyJavaScriptなどのLispの影響を受けてる言語の理解もさらに深まると思う。

xyzzy

xyzzyってのがあって、これはWindows用のテキストエディタなんだけど、Emacsにかなり似てる。「Windowsで使えるEmacs系エディタ」という意味では、Meadowと位置づけが似てる気がする。

こんな感じ?違ったらゴメン。xyzzyMeadowに比べてインストールも簡単(lzhファイルを解凍するだけ)だし、日本人が作ったのでUIは日本語だしIMEやフォントの設定も不要なので、Windowsですぐに使えるEmacs系エディタと言える。

で、なんでCommon Lispを勉強するときにxyzzyの話が出るのかというと、これのマクロはxyzzy Lispという言語で書く。このxyzzy Lispは、かなりCommon Lispに似ていて、xyzzy上で書いてすぐに動かすことができる。つまりxyzzyは、Common Lispの実行環境として考えてもかなり手軽。

早速やってみる

xyzzyをダウンロードして解凍し、xyzzy.exeを起動。

基本操作はEmacs(Meadow)と同じ。今までMeadowを勉強していたので普通に使える。ちょっと違うと感じたのは、

  • C-hで始まるヘルプ系のコマンドが無い。
  • Endがアンドゥ。
  • Homeがバッファ切り替え。
  • クリップボードとヤンクのための領域(kill ring)が別になってる。

とかかな。でもEmacs初心者の自分にはほとんど同じに見える。

Lispを書いて動かしてみる

xyzzyを起動すると、最初に *scratch* というバッファが開いている。ここにLispを書いて、行の末尾でC-j (Ctrl + j)を入力すれば実行できる。

ってことで書いてみた。

(format t "Hello, World!")【ここでC-j】
=>Hello, World!
=>nil

うは、簡単。

  • Lispは、リストを記述して、それを評価する言語。
  • リストは、カッコ()の中にスペース区切りで要素(セル)を書いていく感じで記述する。
  • リストが評価されるとき、最初の要素は関数名とみなされる。2番目以降の要素は引数。
  • 最初の要素のformatってのがデータを出力する関数の名前。
  • 2番目の要素のtってのは真のこと。いわゆるtrueのこと。これをformat関数の第1引数に渡すと、標準出力に出力するよ、という意味になるらしい。ちなみにnilが偽(false)。
  • 3番目の要素は文字列。これをformat関数は出力する。
  • 出力結果の最初の Hello, World! ってのは、format関数によって出力されたもの。
  • もうひとつnilってのが出力されたけど、これは評価結果。関数の戻り値ってこと。
  • つまりformat関数は、データを画面に出力し、戻り値としてnilを返すもの、ってことらしい。
  • xyzzyの*scratch*バッファでLispを実行すると、戻り値も画面に表示されるわけだ。

さすがHello, Worldは奥が深いなあ。いろいろわかった。必ず戻り値があるあたりRubyが似てるのがわかる。

計算をやらせてみる。

(+ 1 2)
=>3
  • リストの最初の要素の+は関数名。評価すると引数で渡した数を合計して返す関数。
  • 戻り値は画面に表示されるので、結果の3が表示された。

とりあえずここまで

引き続き勉強していく。