Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
##(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")