2014年5月16日金曜日

開発環境

計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の2(データによる抽象の構築)、2.4(抽象データの多重表現)、2.4.3(データ主導プログラミングと加法性)、メッセージパッシング、問題 2.75.を解いてみる。

その他参考書籍

問題 2.75.

コード(BBEdit, Emacs)

sample.scm

#!/usr/bin/env gosh
;; -*- coding: utf-8 -*-

;; これまでに書いた手続き
(load "./procedures.scm")

(define (make-from-mag-ang r a)
  (define (dispatch op)
    (cond ((eq? op 'real-part)
           (* r (cos a)))
          ((eq? op 'imag-part)
           (* r (sin a)))
          ((eq? op 'magnitude) r)
          ((eq? op 'angle) a)
          (else
           (error "Unknown op -- MAKE-FROM-MAG-ANG" op))))
  dispatch)

(define pi 3.14)
(define a (make-from-mag-ang 1 0))
(define b (make-from-mag-ang 2 0))
(define c (make-from-mag-ang 0 (/ pi 2)))
(define d (make-from-mag-ang 0 pi))
(define e (make-from-mag-ang 2 (/ pi 6)))
(define f (make-from-mag-ang (sqrt 2) (/ pi 4)))
(define g (make-from-mag-ang 2 (/ pi 3)))
(define h (make-from-mag-ang 2 (* 5 (/ pi 6))))
(define i (make-from-mag-ang (sqrt 2) (* 5 (/ pi 4))))
(define j (make-from-mag-ang 2 (* 5 (/ pi 3))))

(for-each (lambda (x)
            (print x "\n"
                   "実部: " (x 'real-part)
                   " 虚部: " (x 'imag-part)
                   " 絶対値: " (x 'magnitude)
                   " 偏角: " (x 'angle)))
          (list a b c d e f g h i j))

入出力結果(Terminal(gosh), REPL(Read, Eval, Print, Loop))

$ ./sample.scm
#<closure (make-from-mag-ang dispatch)>
実部: 1.0 虚部: 0.0 絶対値: 1 偏角: 0
#<closure (make-from-mag-ang dispatch)>
実部: 2.0 虚部: 0.0 絶対値: 2 偏角: 0
#<closure (make-from-mag-ang dispatch)>
実部: 0.0 虚部: 0.0 絶対値: 0 偏角: 1.57
#<closure (make-from-mag-ang dispatch)>
実部: 0.0 虚部: 0.0 絶対値: 0 偏角: 3.14
#<closure (make-from-mag-ang dispatch)>
実部: 1.732316188810926 虚部: 0.9995402052862048 絶対値: 2 偏角: 0.5233333333333333
#<closure (make-from-mag-ang dispatch)>
実部: 1.0003980841198834 虚部: 0.9996017573460277 絶対値: 1.4142135623730951 偏角: 0.785
#<closure (make-from-mag-ang dispatch)>
実部: 1.0009193780164116 虚部: 1.7315196789846887 絶対値: 2 偏角: 1.0466666666666666
#<closure (make-from-mag-ang dispatch)>
実部: -1.7307220711389157 虚部: 1.0022979160272765 絶対値: 2 偏角: 2.6166666666666667
#<closure (make-from-mag-ang dispatch)>
実部: -1.0019888339967062 虚部: -0.9980072026523263 絶対値: 1.4142135623730951 偏角: 3.9250000000000003
#<closure (make-from-mag-ang dispatch)>
実部: 0.9953988875273785 虚部: -1.7346991251249473 絶対値: 2 偏角: 5.233333333333333
$

0 コメント:

コメントを投稿