Open Source WEB

##(link2sicp "book-Z-H-18.html#%_thm_2.79" "Exercise 2.79")

解答例

install-scheme-number-package 内に

  (put 'equ? '(scheme-number scheme-number)
       (lambda (x y) (= x y)))

を追加
install-rational-package 内に

  (define (equ?-rat x y)
    (= (* (numer x) (denom y))
       (* (denom x) (numer y))))

および

  (put 'equ? '(rational rational)
       (lambda (x y) (equ?-rat x y)))

追加
install-complex-package 内に

  (define (equ?-complex x y)
    (and (= (real-part x) (real-part y))
         (= (imag-part x) (imag-part y))))

および

  (put 'equ? '(complex complex)
       (lambda (z1 z2) (equ?-complex z1 z2)))

を追加
さらに、トップレベルで

(define (magnitude x) (apply-generic 'magnitude x))
(define (angle x)     (apply-generic 'angle x))
(define (real-part x) (apply-generic 'real-part x))
(define (imag-part x) (apply-generic 'imag-part x))

(define (equ? x y) (apply-generic 'equ? x y))

を定義

実行例

gosh> (define n0 (make-scheme-number 1))
n0
gosh> (define n1 (make-scheme-number 1))
n1
gosh> (define n2 (make-scheme-number 2))
n2
gosh> (define r0 (make-rational 1 2))
r0
gosh> (define r1 (make-rational 2 4))
r1
gosh> (define r2 (make-rational 2 3))
r2
gosh> (use math.const)
(#<module math.const> #<module gauche.interactive>)
gosh> (define z0 (make-complex-from-real-imag (* (sqrt 2) (cos pi/4))
                                        (* (sqrt 2) (sin pi/4))))
z0
gosh> (define z1 (make-complex-from-mag-ang (sqrt 2) pi/4))
z1
gosh> (define z2 (make-complex-from-real-imag 2 1))
z2
gosh> (equ? n0 n1)
#t
gosh> (equ? n0 n2)
#f
gosh> (equ? r0 r1)
#t
gosh> (equ? r0 r2)
#f
gosh> (equ? z0 z1)
#t
gosh> (equ? z0 z2)
#f

コード

##(sicp-answer-code "ex-2.79.scm")

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us