次の式を前置記法に翻訳せよ.
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 件のコメント:
コメントを投稿