- とりあえず関数を動かしてみて、どのような振る舞いをするか確かめる
- a-plus-abs-b は a + abs(b) のことだということは動かせば分かる。
(define (a-plus-abs-b a b) ((if (> b 0) + -) a b)) (a-plus-abs-b 1 2) ; 3 (a-plus-abs-b 1 -2) ; 3 (a-plus-abs-b -1 2) ; 1 (a-plus-abs-b -1 -2) ; 1
1.1.3節より
ルールA
ルールB
- 数字列の値は、その表す数値とする
- 基本演算子の値は、対応する演算を実行する機会命令の列とする
- それ以外の名前の値は、その環境で名前と対応付けられたオブジェクトとする
上記定義に従えば、ルールA.1 → ルールA.2 → ルールB.2 により、+ or - の演算子のどちらかが選択される。
;手動トレースによる回答 (a-plus-abs-b 5 -3) ==> ((if (> -3 0) + -) 5 -3) ==> ((if #f + -) 5 -3) ==> (- 5 -3) ==> 8