LISPUSER

LISPMEMOLisp is like a ball of mud - you can throw anything you want into it, and it's still Lisp. -- Anonymous

(top)  (memo)  (rss)

「なるほど!」と思った瞬間 in Lisp

ちょっと古いネタですが comp.lang.lisp での Zach Beane の投稿。途中まで 訳して、「後で訳す」になっていたのだがlemonador.com に取り上げられてい たので続きをやってみました。

From: Zach Beane Subject: Aha! moments

私が「なるほど!」と思うきっかけを与えてくれた事を思いつくままに列挙します。

  • cl-ppcre のソースを読む事は次のような事を見せてくれました。
    • COMPILE や COMPILE-FILE を使わない(クロージャを繋ぎ合わせた形式への) 実行時のコンパイル
    • コンディションによる素晴しいエラー報告付きの正規表現文字列のパース
    • 現実的な問題に対する Lisp の解答が明快で、包括的で、そして **高速** であること
  • Keene の CLOS 本を読む事
  • 実行を継続する事が可能なエラーの使い道を探す事: 複数階層にまたがった 返り値のチェックをシンプルな handler-bind のラッパーで置き換える
  • ファイルフォーマットや通信プロトコルがディスクや配線や、時にはメ モリにあるビットにすぎないという事に、また Lisp はとてもよく正し ビットやオクテットを生成できるという事に気がつく事:
    • CLX は Lisp プログラムであり、 C の Xlib へのバインデイングでない事を学ぶ
    • Marc の CL-PDF ライブラリが単なる Lisp プログラムである事を学ぶ
    • Forde の binary-tree について学ぶ
    • Peter の本のバイナリファイル解析の章を読む
  • Will Hartung's の "Guerilla Lisp Opus" を読む事
  • 大半の Common Lisp 実装が、ほとんど Common Lisp で書かれている事を悟る事

いくつかのテーマ:

  • CLOS やクロージャやコンディションといった道具の使い方の概念を理解していたとしても、 それらでトリッキーな問題をうまく解決すると「なるほど!」と関心する事になる
  • 「なるほど!」と思う瞬間は、複雑なタスクが単純に、一見不可能な問題が可能になった ときである(適切な努力と期間を注ぎこんだ後にね)。それらは魔法を生み出します。 (以前 Philip Greenspun は彼の授業は学生に一学期を通して Amazon を作る方法を 教えていると言っていた; 誇張を別にすれば、それは本当に役に立つウェブアプリケーションを 構築するための秘密を明らかにする)

助言:

  • 興味深い動きについて活発な好奇心を持つこと(どうして CL-PPCRE は Perl よりも高速に動作できるのか?)
  • 利用可能なツールを広く意識すること、そして直接的な応用について心配しないこと
  • 退屈に安定しないこと(もし貴方が、自分を標準以下であると感じる何かに ゆだねてしまったなら、突破口を見つける事は困難になる)
  • 通常、一人の面白いものを書く人はずっとそれを続ける。したがって、面白い人々を見つけて 観察しよう。(なるほど! の伝達効果?)

マイナーな楽しみ:

  • format のトリック (~v や ~{~^~} が特に面白い)
  • SLIME で GF オブジェクトをインスペクトしてみよう

あなたが「なるほど!」と思ったものがこのなかにあっただろうか? どんな種類のものを見つけたときに楽しかっただろうか? もっと「なるほど!」と思う瞬間を望んでいる人々にどんなアドバイスをしますか?

Zach

個人的感想だと、C/C++ から Lisp に移ってきたときに disassemble を見つけ たときかなぁ。 Scheme から入門したんで、けっこう衝撃でした。あぁ、コンパイラ意識してるんだなって。 あとは Peter Norvig の PAIP を読んだ時とか。例が面白くてね。日本語訳でないかなぁ。でないだろうなぁ。

あとは、大学入りたての頃にスティーブン・レビーのハッカーズの中でゴスパーの「データ ってのは、口の聞けないプログラムみたいなもんだ」とか、グリーンブラットの 「どこかのハッカーが一週間ほど Lisp と格闘して、"みてくれ!! Lisp をモノにしたぞ!!" と叫ぶ、そんなことがしょっちゅうあるだろうさ。でも、それと本当に使いものになるシステムの間には大きな開きがあるんだよ」 みたいな台詞を読んだことがありまして。読んだ当時は C しか使えなかったんで、あんまり意味がわからなかった。 で、その後 Lisp に出逢って実際にやってみたら納得。ああ、こうゆう事だったのかと。

もし、あのグリーンブラットの台詞を覚えてなければ、自分も Lisp インタプリタを作ったところで満足して 「Lisp?あぁ。簡単に作れるよ。でも今やポンコツだね。 xxx のほうがクールだよ!!」 とか言ってたような気がします。たぶん商用のコンパイラを使いもしないで、自作のヘボ Lisp で半可通になってただろうなぁ…。

posted: 2006/11/09 23:32 | permanent link to this entry | Tags: LISP

(top)  (memo)  (rss)