開発環境
- 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.73-c.を解いてみる。
その他参考書籍
- Instructor's Manual to Accompany Structure & Interpretation of Computer Programs
- プログラミングGauche (Kahuaプロジェクト (著), 川合 史朗 (監修), オライリージャパン)
問題 2.73-c.
コード(BBEdit, Emacs)
sample.scm
#!/usr/bin/env gosh
;; -*- coding: utf-8 -*-
;; これまでに書いた手続き
(load "./procedures.scm")
(define (deriv exp var)
(cond ((number? exp) 0)
((varible? exp)
(if (same-variable? exp var)
1
0))
(else ((get 'deriv (operator exp))
(operands exp)
var))))
;; べき乗の微分手続きとそれをを設定するのに必要な補助プログラム
(define (install-expt-package)
(define (deriv exp var)
(let ((n (exponent exp))
(u (base exp)))
(make-product
(make-product n
(make-exponetiation u
(make-sum n -1)))
(deriu var))))
(define (exponent exp) (caddr exp))
(define (base exp) (cadr exp))
(define (make-product m1 m2)
(cond ((or (=number? m1 0)
(=number? m2 0))
0)
((=number? m1 1) 1)
((=number? m2 1) 1)
((and (number? m1)
(number? m2))
(* m1 m2))
(else (list '* m1 m2))))
(define (=number? exp num)
(and (number? exp)
(= exp num)))
;; システムの他の部分とのインターフェース
(put 'deriv '** deriv)
(put 'make-expt '** make-expt)
'done)
;; データ主導システムに設定(get, putの実装はまだなのでコメントアウト)
;; (install-expt-package)
入出力結果(Terminal(gosh), REPL(Read, Eval, Print, Loop))
$ ./sample.scm $
0 コメント:
コメントを投稿