Emacs Lisp 盆栽的プログラミング

 Emacs Lisp でプログラムを書いてみた。

  Emacs LispEmacs というテキストエディターに付属している Lisp 風のマクロであると誤解される向きもある。Emacs に特化し、良きにつけ悪しきにつけ、Emacsバインドされつつ今日に至っているのは紛れもない事実だが、れっきした Lisp 処理系だ。

 Lisp には昔から興味だけはあったが、まとまった大きさのプログラムを書くのはこれが始めて。

 他のプログラム言語で、function (x) と書くところを (function x) と書き、なんでもかんでも()で表現し、関数型言語のくせに、戻り値を返す為の return x に当たる構文がないなど、なにかと戸惑ってしまうが、この数週間ぶっ続けで、コードを書いていたら、だいぶ慣れてきた。

 

 実際にプログラムしてみると、Lisp は面白い言語で、コーディングそのものが、パズルっぽい。シンプルな言語だが、シンプル過ぎて、どこから手をつけたらいいのか判らないという面もある。教わる方はともかく、教える方には、とても大変な言語だという印象を持った。

 Lisp は短いフレーズ(S式)で意味を持つ。しかもインタプリタで、Emacs という開発兼実行環境があるので、書けばその場で評価し試す事ができる。

 最小限のフレーズを書き、評価し、確認し、それを組み合わせていく事でプログラムができあがる。その S 式の組み合わせ方がパズルっぽくて面白い。最初に書いたコードは、とりあえず動く事を目標に、大昔のBASIC風に書いてみたが、コードの見た目が美しくなく、Lisp のありがたみも感じられなかったので、その次からは、なるべく Lisp 風に書いてみた。自分で書いたコードは随分コンパクトになった。後になって自分で書いたコードが読めなくなるのではないかと危惧したが、さほどでもなかった。時間を置いたらどうなるかわからない。

 文法的な制限が少ないので、論理的な破綻さえなければ、実現したいアルゴリズムをダイレクトにコードに反映でき、多様なコードが書ける。

 Lisp には独特のコーディング手法の美学があるらしい。無名関数の多用、ループ構文より再帰。変数よりも高階関数。冗長なコードを嫌い凝縮されたコーディングを良しとする。これにより、コードがどんどん畳み込まれ、コンパクトになっていく。

 頭がついてこないので、もともと一日に書ける分量は限られる上、Lisp は行当たりのロジックの密度が高いので、半日考えて、数行しか書けない事もある。

 毎日、コードに手を入れていると、まるで、盆栽を手入れしているような気分になる。

 

 業務として、Lisp を扱う職場はあまりないし、初心者が入り込む隙間はないだろうが、趣味としていじくりまわすには、とても面白い。