Lisperでもハッカーでもない

実は私はLisperでもハッカーでもない。単なるLISP経験者。LISPハッカー的なイメージももっていない。現在ソフトウェアエンジニアリングを仕事の糧としているということもあり、またLISP時代もNTTとかXEROXという環境で業務としてソフトウェア開発をやってきた訳でもある。人工知能(AI)がブームのときでもあり、バブルのときでもある。機械翻訳、金融系エキスパートシステムポートフォリオ、事業承継対策、相続税対策、生保の生活設計)、マニュアル診断、マルチメディア試作、高速PostScriptプリンタ試作を行った。

例えば、再帰をバンバン使っていたかというとそうではない。再帰をあえてPROG-LOOPで記述していた。XEROX時代は「1121」というハードウェアを売ることだけが最終目標だった。JSTARチーム、SMALLTALKチーム、LISPチームでそれぞれ目標台数が設定されていたくらいだ。1121はMem=16KB、HD=8MBくらいだったのではないか。再帰だとStackやHeapを消費してパフォーマンスが出なくなることがあったので、StackやHeapを消費しないPROG-LOOPを多用していた。ほとんど手続き型言語とかわりない使い方だ。
(※後日の調査にて1121は、Mem=1MB以上、HD=80MBと判明)

LISPのメリットと適性を思い出しながら考えてみた。結論は以下の3つだ。

  • 数学的帰納法を適用することで解が得られるようなドメインには適している
  • 短期間でプロトタイプ作成してデモンストレーションするには適している
  • アルゴリズムの学習や考案には適している

    数学的帰納法を適用できるドメイン

    −σで試算し、+σで試算する。さらに幅を徐々に狭めて試算を繰り返し、目指す最終形に収束させていく。ポートフォリオ、事業承継対策、相続税対策、生活設計(収支バランスと資産のシミュレーション)などはそうだ。パラメータ間の相関を厳密に定義せず、行き過ぎたら戻す、戻しすぎたらちょっと進めるという制御だけを与えて、ひたすらシミュレーションを繰り返し、リスクとのバランスで数年後に資産が最も増えるものという最終形を目指して最適なパラメータを導くのだ。

    機械翻訳実験でも、形態素解析以降の係り受けから多義が爆発的に出てくる。多義が発生する条件をパラメータ化し、翻訳文をNativeに評価させた情報をもとに相関関係を見出しながら、徐々にパラメータの幅を狭めていく。

    何が変動要因となるパラメータであるかを見きわめて揺さぶりの方向を決め、どのように目指す最終形に収束させるかということだけに注力すればいい。途中のロジックは要らない。後はLISPが延々と試行錯誤でシミュレーションを繰り返してくれる。せいぜい無限ループにならないようにするだけだ。

    これらは数学的帰納法に基づく再帰処理で解が得られる。どういう状態になれば再帰を抜けるかの条件のみがうまく設定できればよいのだ。そういったドメインがあるのだ。LISPに適したドメインがあるのだ。無理してあらゆるドメインのシステムにLISPを用いるというのは考えたことがない。言語は手段であって、目的ではないはず。

    短期でのプロトタイプ作成

    LISP開発プロセスは進化型プロトタイプ手法になる。動くモックアップを作って提示し、そこに肉付けしていく感じで開発できる。1ヶ月かかるシステムでも最初の1日2日で50%ができた気分になれた。

    アルゴリズムの学習や考案

    Lispを学べばよいプログラマになれるか。いわゆるアルゴリズムの理解や考案にLISPは適している、そういった点での示唆だと思う。LISPを使うと「アルゴリズムの実現」というものがプログラミングの中心となる。いかに素晴らしいアルゴリズムを考案するかだ。KISSなど主張する人はいなかった。理論で構築する場合もあるが、上記のように試行錯誤で最適なアルゴリズムを導出するという面もある。インタプリタでもあるので、思いついたアルゴリズムをすぐコード作成し検証できる環境も適していた。