https://github.com/takeisa/uschemer/tree/v0.05
if式
if式の構文は以下の通り。(if test-form then-form else-form)
test-formを評価し、その結果に応じて以下の処理を行う。
真の場合 → then-formの評価結果を返す
偽の場合 → else-formの評価結果を返す
この処理のRubyコードの一部示す。
def eval_if(exp, env)
test_form, then_form, else_form = if_to_test_then_else(exp)
if eval(test_form, env) then
eval(then_form, env)
else
eval(else_form, env)
end
end
if式の動作を、そのまま実装したコードで、とても簡単だ。
trueとfalse
trueとfalseが使えるように、KEYWORDS = {
:true => true,
:false => false
}
を定義し、環境に追加した。
比較関数の定義
ifが使えるようになったので、比較関数 =, <, >, <=, >=, /= を定義した。FUNCS = {
〜略〜
:< => [:built_in, lambda {|x, y| x < y}],
:> => [:built_in, lambda {|x, y| x > y}],
〜略〜
}
実行例
eval_print("(if true 1 2)")(if true 1 2) #=> 1
eval_print("(if false 1 3)")
(if false 1 3) #=> 3
eval_print("(if (< 1 2) 1 2)")
(if (< 1 2) 1 2) #=> 1
eval_print("(if (> 1 2) 1 3)")
(if (> 1 2) 1 3) #=> 3
0 件のコメント:
コメントを投稿