Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2007-12-18

Practical Common Lisp (10)

| 23:11 | Practical Common Lisp (10) - わだばLisperになる を含むブックマーク はてなブックマーク - Practical Common Lisp (10) - わだばLisperになる

引き続きPractical Common Lisp 第4章4. Syntax and Semanticsを読んでメモしてみています。文字ばっかりだと、英語が苦手な自分には何だか良く分かりません…。とりあえず、ウェブ翻訳で訳したりして適当に妄想してるメモになっております。

Breaking Open the Black Box

  • Lispの文法と意味論の詳細に立ち入る前に他の言語とはどういったところが違うのかを考察してみる。
  • 殆どの言語の処理系(コンパイラ、インタプリタ共に)はブラックボックスのようなものになっている。ユーザはテキストをそれに読み込ませて結果を受けとる。
  • ブラックボックスの詳細に立ち入るならば、もちろん沢山のパートに分けられる。字句解析や用いられるデータ構造等様々あるが、ブラックボックスたる所以は、その構造や機構が専らブラックボックス内部の処理プロセスで用いられるのみで、それ自体は、処理系製作者向けのものといった感じになっているところ。
  • Common Lispはちょっと違っていて、どう処理系を実装するかと、どう言語が定義されるかの二つが考慮された帰結として、一つのブラックボックスで処理されるのではなくて、二つのブラックボックスで二段階に処理される。テキストをLispのオブジェクトに変換するリーダが最初のもので、それを評価する評価器がそれに続く。
  • リーダは文字列をLispオブジェクトたるS式への変換を担当する。Lisp以外の言語でいうと処理系内部での構文木の生成にあたる。
  • 評価器は構築されたS式からLispの文法を定める。S式が全部正しいLispオブジェクトという訳ではない、例えば、(foo 1 2)、("foo" 1 2)は共にS式としては正しいが、Lispのフォームとしては、最初が文字列のリストはLispフォームとして意味を成していない。
  • ということで、リーダがどのようにS式を組み立てるか、と、評価器がどのように式を評価するのかの二つに焦点を当てて考察したい。