3.7 (p.7) Success a Failure String k a Failure s エラーが伝播していく エラーを発生する (p.8) failM "Division by 0" 先行評価 1/0 の部分式は計算されずに全体の結果が 0となる “Division by 0” というエラーが報告される Try Expr Expr Fail Expr (p.9) tryM (interp m1 e) (interp m2 e) 第1引数を評価し、エラーが発生すれば第2引数を評価する関数 Success v m 3.8 (p.9) GetX SetX Expr GetY SetY Expr While Expr Expr Begin [Expr]; Num 4 (p.10) \ s -> (a, s) \ s0 -> let { (a, s1) = m s0 } in k a s1 \ (x,y) -> (x,(x,y)) \ (x,y) -> (y,(x,y)) interp (Begin fs) e interp (While m1 m2) e 3.9 (p.11) プログラムの動作にいくつかの選択肢が存在すること 後戻り Prolog Amb Expr Expr Fail Expr Failure message interp m1 e `append` interp m2 e (p.12) hdL 遅延評価