Parenist養成ゼミ:式と評価
この記事は、Parenist養成ゼミシリーズの記事である。
今回は、Parenは式を評価する評価機であること、及び、その評価規則について理解することを目的とした。
評価機の説明の容易さもParenの特徴の一つであると言えるだろう。
expression
Parenは式(expression)を評価(evaluate)するプログラムである。
式とはlistまたは、atomのことをいう。
- list
atom
- symbol
- string
- number
- function
- macro
- special-operator
- ...
list
listとは、零個以上の式を括弧で括ったものである。
listを構成するそれぞれの式を、要素(element)という。
要素がないようなlistはempty listといい、symbol nil
と等価である。
()
(a)
(a b)
(a (a b) c)
(((___ mm ___))()(!!!)(__)()))
(+ (+ 1 2 ) 3)
atom
atomとは、式を構成する最小単位のことをいう。
symbol
symbolとは、ある値への参照を一つ持つデータ型である。
foo
string
stringとは、文字列を表すデータ型である。
"foo bar buzz"
number
numberとは、数値を表すデータ型である。
10
2x1010
8x12
0xa
3.14
evaluation
評価は以下の規則にしたがって行われる。
list
listはoperator(first element)の型によって評価のされ方が決定される。
評価可能なoperatorは以下のとおり。
- symbol
- special-operator
- function
- macro
symbol
operatorがsymbolの場合、symbolを評価した結果、後述するいずれかの型だった場合は、その規則に従って評価する。
special-operator
operatorがspecial-operatorの場合、special operatorの規則に従って評価を行う。
paren man special-operator
function
operatorがfunctionだった場合は、左から順に式を評価(eval)した結果を関数本体に適用(apply)する。
macro
operatorがmacroだった場合は、引数をevalすることなしに、applyした結果をevalする。
atom
symbolを除くatomは、評価されると自身を返す。
symbolは、評価されると現在の環境から最も近い環境に束縛されている値を返す。