開発環境
- 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.4(抽象データの多重表現)、2.4.3(データ主導プログラミングと加法性)、メッセージパッシング、問題 2.75.を解いてみる。
その他参考書籍
- Instructor's Manual to Accompany Structure & Interpretation of Computer Programs
- プログラミングGauche (Kahuaプロジェクト (著), 川合 史朗 (監修), オライリージャパン)
問題 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 コメント:
コメントを投稿