Next: 5.2 ファイルの読み込み(ロード)
Up: 5 Lispの処理
Previous: 5 Lispの処理
インタプリタは,read,
eval, printという処理を繰り返しているだけです.インタプリタを終わるのは,
(bye)や,(exit),:exitなどを入れると終わります.
readは,数,文字列("abc"のように"ではさまれたもの. 表示のためのもの),シンボル
(a, testなどのような変数や関数に使われる文字列),リストフォーム(かっこ
開ではじまり,かっこ閉まで)などを入力してインタプリタ内部にそれに相当
するデータを作ります.読み込める式は,S式(Symbolic Expression)と呼ばれる.
evalは与えられた式を評価します.
- 1.
- 式が,数,文字列などはそのまま返す.
- 2.
- 式が,シンボルならばそのシンボルの値を返す.
- 3.
- 式が,リストフォームならば,リストフォームの先頭データの種類
によって以下のように処理する.
- (1)
- すでに定義されている関数ならば,第二以降のデータをすべて順
に評価(EVAL)して,その関数の引数として与えて,関数の本体の計算を行な
い,計算結果を返す.
- (2)
- スペシャルフォームとして定義されているものならば,それぞれ
のスペシャルフォームの処理の仕方に応じて処理して結果を返す.
- (3)
- マクロとして定義されているものならば,マクロ定義の引数に,
第二以降のデータを評価せずに渡し,マクロ定義を二度評価した結果を返す.
このプロセスにおける二度の評価の内,最初の評価までの段階がマクロ展開と
呼ばれる.全体として,マクロ展開をおこなったものを評価した結果を返すこ
とになる.
readによって読み込まれた式を,evalによって評価し,その評価結果を
標準出力へ表示します.
インタプリタ自信をLispで定義するならば,
(while t (prin1 ">") (print (eval (read)))
という形で定義できます.
generated through LaTeX2HTML. M.Inaba 平成18年5月7日