2008年11月10日月曜日

【PAIP】1 Introduction to Lisp

一章の趣旨は、

"Chapter 1 gives a quick introduction by way of small examples that demonstrate the novel features of Lisp. It can be safely skipped or skimmed by the experienced programmer."

とのこと。私はan experienced programmerではないので、ここからやっていくことにする。

以下、メモ。

  • この章が難しく感じるなら入門書をやってから来てね、という関門的な章らしい。いきなり玉砕するかも。

  • はじめにObjectsをさくっと定義しているところがよい。このObjectsの捉え方は、手短だが、計算理論における正しい捉え方だ。そこでは、datumもoperationもObjectsである、と。
  • LispシステムのことをLispと呼んでいる。これ、米国のLisperとやりとりすると結構でてくる表現。If your lisp has some trouble with gc ...とか。
  • 実践CLのときにも書いたと思うけど、expressionを式と和訳上結びつけたのは日本の数学や計算機科学の最大の損失ではないか。expressionは和訳するなら「表現」でばっちりだと思うのだが。

  • 1.1 Symbolic Computation
  • もしかしてエディタxyzzyの名前のネタもとは、このP7なのか?
  • quoteの説明は、readアルゴリズムには踏み込まず、evaluate回避という視点のみ。ANSI-CLと似た感じかな。

  • 1.2 Variables
  • symbolがobjectsの名前付けにつかえる、という書きぶりがうまい。
  • 名前づけの対象になるObjectsは、variablesとfunctions。
  • ここでのvariablesは、他の言語の変数よりも、数理論理学の変項のニュアンス。まあvariablesを変数という言葉と和訳上の対応を決めたのも、かなりセンス悪いと思いますが。もう「可変」でよかったのではないかと。


  • 1.3 Special Form
  • (setf x 3)の総体がa special form。setfは、special syntaxで、compilerに対する指示マーカー。という理解が現代的、とな。
  • 用語の混乱の危険があるときは、(setf x 3)をa special form expression、setfをa special form operatorと呼ぼう、とな。

  • 1.4 Lists
  • あっさり。

  • 1.5 Defining New Functions
  • lambda listじゃなくてparameter listと呼ぶ。
  • 関数の名前は、その関数の役割りを明示すべき。そのために、単に名前を明示するためだけであっても関数定義せよ。

  • 1.6 Using Functions
  • "a function must return a value, and it must not return any incorrect values." これが関数の設計観点であると。なるほど。

  • 1.7 Higher-Order Functions
  • lambdaのbetter nameはmake-functionだろう、と。
  • λ発祥は、Churchのタイポグラフィの工夫だったのか。。。(^ -> Λ -> λ)
  • (lambda (x) ...)と#'(lambda (x) ...)の違いはちょっとやる、と。
  • CLのlambdaを考えるときは、鯛焼が頭に浮かぶ。これは竹内先生の呪いだ。。。
  • run-timeに関数を生成できるのがlambda表現のメリットである(それはわかる)。そういう関数をclosureと呼ぶ(あり?そういうことだっけ?)。3.16で説明する(待ちます。。。)。

  • 1.8 Other Data Types
  • CLでは25種のObjectが定義されている。
  • 文字列紹介。

  • 1.9 Summary: The Lisp Evaluation Rule
  • 評価機構の簡単な説明。環境については触れず。
  • lispではreadとevaluationが別プロセスであることの説明。

  • 1.10 What Makes Lisp Different?
  • AIアプリケーションにとってLispが重要である7つの主因を掲示。
  • そしてそれらをひとつひとつ分析する。
  • 分析の内容が具体的でわかりやすい。

そういえば、昔、この一章を眺めたことがあった(それも忘れてた)。そのときは、言っていることはまあわかるが、それらが自分が確信をもって身につけているものとは到底思えなかった(lambdaのくだりとか)。なので、その先を読むのをやめた。

今回はさすがに準備してきたので、自分でも先に進んでよいと思える。
こつこつ。

0 件のコメント: