開発環境
- 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 コメント:
コメントを投稿