開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Scheme (プログラミング言語)
- Gauche (処理系)
計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の2(データによる抽象の構築)、2.1(データ抽象入門)、2.1.4(拡張問題: 区間算術演算)、問題 2.11.を解いてみる。
その他参考書籍
- Instructor's Manual to Accompany Structure & Interpretation of Computer Programs
- プログラミングGauche (Kahuaプロジェクト (著), 川合 史朗 (監修), オライリージャパン)
問題 2.11.
コード(BBEdit, Emacs)
sample.scm
#!/usr/bin/env gosh ;; -*- coding: utf-8 -*- ;; これまでに書いた手続き (load "./procedures.scm") (define (mul-interval x y) (let ((l1 (lower-bound x)) (u1 (upper-bound x)) (l2 (lower-bound y)) (u2 (upper-bound y))) (cond ((and (>= l1 0) (>= l2 0)) (make-interval (* l1 l2) (* u1 u2))) ((and (>= l1 0) (< l2 0) (>= u2 0)) (make-interval (* u1 l2) (* u1 u2))) ((and (>= l1 0) (< u2 0)) (make-interval (* u1 l2) (* l1 u2))) ((and (< l1 0) (>= u1 0) (>= l2 0)) (make-interval (* l1 u2) (* u1 u2))) ;; 2回を超える乗算を必要とする場合 ((and (< l1 0) (>= u1 0) (< l2 0) (>= u2 0)) (let ((p1 (* l1 l2)) (p2 (* u1 u2)) (p3 (* l1 u2)) (p4 (* u1 l2))) (make-interval (min p3 p4) (max p1 p2)))) ((and (< l1 0) (>= u1 0) (< l2 0)) (make-interval (* u1 l2) (* l1 l2))) ((and (< u1 0) (>= l2 0)) (make-interval (* l1 u2) (* u1 l2))) ((and (< u1 0) (>= u2 0) (< l2 0)) (make-interval (* l1 u2) (* l1 l2))) (else (make-interval (* u1 u2) (* l1 l2)))))) (define nums '(-10 -5 0 2 4)) (define i1 (make-interval -2 -1)) (define i2 (make-interval -1 1)) (define i3 (make-interval 1 2)) (define intervals (list i1 i2 i3)) (for-each (lambda (x) (for-each (lambda (y) (print x ", " y ", " (mul-interval x y))) intervals)) intervals)
入出力結果(Terminal(gosh), REPL(Read, Eval, Print, Loop))
$ ./sample.scm (-2 . -1), (-2 . -1), (1 . 4) (-2 . -1), (-1 . 1), (-2 . 2) (-2 . -1), (1 . 2), (-4 . -1) (-1 . 1), (-2 . -1), (-2 . 2) (-1 . 1), (-1 . 1), (-1 . 1) (-1 . 1), (1 . 2), (-2 . 2) (1 . 2), (-2 . -1), (-4 . -1) (1 . 2), (-1 . 1), (-2 . 2) (1 . 2), (1 . 2), (1 . 4) $
0 コメント:
コメントを投稿