2013年6月27日木曜日

開発環境

計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の2(データによる抽象の構築)、2.5(汎用演算のシステム)、2.5.3(例: 記号代数)、拡張問題: 有理関数の問題 2.97、a、bを解いてみる。

その他参考書籍

問題 2.97

コード(BBEdit)

sample.scm

;; 汎用演算
(define (reduce x y) (apply-generic 'reduce x y))

;; install-term-list-package
  ;; システムの内部手続き
  (define (reduce-terms n d)
    (let ((g (gcd-terms n d)))
      (let ((nn (div n g))
            (dd (div d g)))
        (list nn dd))))
  
  ;; システムの他の部分とのインターフェース
  (put 'reduce-terms '(term-list term-list)
       (lambda (n d) (tag (reduce-terms n d))))

;; install-poly-package
  ;; システムの内部手続き
  (define (reduce-poly p1 p2)
    (if (same-variable? (variable p1) (variable p2))
        (let ((v (variable p1))
              (terms-1 (term-list p1))
              (terms-2 (term-list p2)))
          (let ((terms-list reduce-terms terms-1 terms-2))
            (list (make-poly v (car terms-list))
                  (make-poly v (cadr terms-list)))_))
        (list p1 p2)))
  
  ;; システムの他の部分とのインターフェース
  (put 'reduce '(polynomial polynomial)
       (lambda (p1 p2) (tag (reduce-poly p1 p2))))

;; install-integer-package
  ;; システムの内部手続き
  (define (reduce-integers n d)
    (let ((g (gcd n d)))
      (list (/ n g) (/ d g))))
  
  ;; システムの他の部分とのインターフェース
  (put 'reduce '(integer integer)
       (lambda (n d) (tag (reduce-integer n d))))

入出力結果で確認できあない状態が続いてるから、解答がどんどん微妙になってきてる気がする。。ただ、もうちょっと先にputとgetの定義の仕方が出てくるみたいなので、それを憶えてから2周目に本書を取り組む時に、いろいろと確認してみることに。今は本書の全体像を掴むために、正確さよりも一歩一歩先に進めることを優先。

0 コメント:

コメントを投稿