next up previous
Next: 5.2 ファイルの読み込み(ロード) Up: 5 Lispの処理 Previous: 5 Lispの処理

5.1 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日