問題2.79 – SICP(計算機プログラムの構造と解釈)その89
2009年02月02日
問題2.79
各算術演算パッケージに equ?
手続きとインターフェースを追加する。
;; 通常(ordinary)の算術演算パッケージに equ? を追加 (put 'equ? '(scheme-number scheme-number) (lambda (x y) (= x y))) ;; 有理数算術演算パッケージ equ? を追加 (define (equ-rat? x y) (and (= (numer x) (numer y)) (= (denom x) (denom y)))) (put 'equ? '(rational rational) (lambda (x y) (equ-rat? x y))) ;; 複素数算術演算パッケージに equ? を追加 (define (equ-complex? z1 z2) (and (= (real-part z1) (real-part z2)) (= (imag-part z1) (imag-part z2)))) (put 'equ? '(complex complex) (lambda (z1 z2) (equ-complex? z1 z2)))
汎用算術演算手続きに equ?
手続きを登録する。
(define (equ? x y) (apply-generic 'equ? x y))
実行結果
(equ? (make-scheme-number 2) (make-scheme-number 3)) gosh> #f (equ? (make-scheme-number 2) (make-scheme-number 2)) gosh> #t (equ? (make-scheme-number 3) (add (make-scheme-number 2) (make-scheme-number 1))) gosh> #t (equ? 2 3) gosh> #f (equ? 2 2) gosh> #t (equ? 3 (add 2 1)) gosh> #t (equ? (make-rational 1 2) (make-rational 2 3)) gosh> #f (equ? (make-rational 1 2) (make-rational 1 2)) gosh> #t (equ? (make-rational 1 2) (make-rational 2 4)) gosh> #t (equ? (make-complex-from-real-imag 1 2) (make-complex-from-real-imag 2 3)) gosh> #f (equ? (make-complex-from-real-imag 1 2) (make-complex-from-real-imag 1 2)) gosh> #t
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542