2014年10月12日日曜日

[SICP] 問題 1.02 : 前置記法

次の式を前置記法に翻訳せよ.
 5 + 4 + (2 - (3 - (6 + 4/5)))
-------------------------------
       3(6 - 2)(2 - 7)
Lispでは前置記法を採用しているため, 前置記法に慣れるための問題です. p.5の図のように数式の構造を把握できれば, 前置記法に書き表せます.
Racketのエディタは, カッコを閉じた時に対応する開きカッコを調べてくれます. また, タブキーを押すとインデント量を適切に設定してくれます. これらの機能をうまく使えば, 入力した式の構造を理解しやすくなります.
前置記法に翻訳した式は次のとおりです.
(/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5)))))
   (* 3 (- 6 2) (- 2 7)))
式を評価した結果は次のとおりです.
ようこそ DrRacket, バージョン 6.1 [3m].
言語: Pretty Big; memory limit: 2048 MB.
> (/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5)))))
     (* 3 (- 6 2) (- 2 7)))
-37/150
> 
結果が有理数の場合, 分数のまま返してくれるので驚きです.
手で計算した結果と合っていました(^o^)

0 件のコメント:

コメントを投稿