問題1.4, p.11

(a, b) = (10, -10) の場合を考える。以下の用に評価される。

(a-plus-abs-b 10 -10)
=> ((if (> b 0) + -) a b)
=> ((if (> -10 0) + -) a b)
=> (- a b)
=> (- 10 -10)
=> 20

結果、20と評価される

サンプルコード

;code/problem-1-4.scm

(define (a-plus-abs-b a b)
    ((if (> b 0) + -) a b))

;#?=(a-plus-abs-b 10 -10)
;#?=(a-plus-abs-b 10 10)

実行結果

#?="./problem-1-4.scm":6:(a-plus-abs-b 10 -10)
#?-    20
#?="./problem-1-4.scm":7:(a-plus-abs-b 10 10)
#?-    20