2014年10月14日火曜日

[SICP] 問題 1.04 : 合成式を演算子として使う

われわれの評価モデルは, 演算子が合成式である組合せでも使えることを観察せよ. それに従って, 次の手続きの振舞いを述べよ.
(define (a-plus-abs-b a b)
  ((if (> b 0) + -) a b))
問題文の手続きをエディタに入力します.
(define (a-plus-abs-b a b)
  ((if (> b 0) + -) a b))
「+」などの演算子が入る箇所にif式が入っているので、奇妙な感じがします. この手続を評価してみます.
ようこそ DrRacket, バージョン 6.1 [3m].
言語: Pretty Big; memory limit: 2048 MB.
> (a-plus-abs-b 4 3)
7
> (a-plus-abs-b 4 -3)
7
> 
評価結果から, aにbの絶対値を加えていることが分かります. こういう事ができるからといって, 何が嬉しいのかは今の時点ではよくわかりませんが, テキストを読み進めると, こういうことができないと苦労する例が出てきます\(^o^)/

0 件のコメント:

コメントを投稿