Mukai Systems

Parenist養成ゼミ:式と評価

この記事は、Parenist養成ゼミシリーズの記事である。

今回は、Parenは式を評価する評価機であること、及び、その評価規則について理解することを目的とした。

評価機の説明の容易さもParenの特徴の一つであると言えるだろう。

expression

Parenは式(expression)を評価(evaluate)するプログラムである。

式とはlistまたは、atomのことをいう。

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

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は、評価されると現在の環境から最も近い環境に束縛されている値を返す。