問題2.80 – SICP(計算機プログラムの構造と解釈)その90

問題2.80

各算術演算パッケージに =zero? 手続きとインターフェースを追加する。

;; 通常(ordinary)の算術演算パッケージに =zero? を追加
  (put '=zero? '(scheme-number)
       (lambda (x) (= x 0)))


;; 有理数算術演算パッケージに =zero? を追加
  (define (=zero-rat? x)
    (= (numer x) 0))
  (put '=zero? '(rational)
       (lambda (x) (=zero-rat? x)))


;; 複素数算術演算パッケージに =zero? を追加
  (define (=zero-complex? z1)
    (and (= (real-part z1) 0)
         (= (imag-part z1) 0)))
  (put '=zero? '(complex)
       (lambda (z1) (=zero-complex? z1)))

汎用算術演算手続きに =zero? を登録する。

(define (=zero? x) (apply-generic '=zero? x))

実行結果

(=zero? 0)
gosh> #t
(=zero? 1)
gosh> #f
(=zero? (sub 3 (add 1 2)))
gosh> #t

(=zero? (make-rational 1 2))
gosh> #f
(=zero? (make-rational 0 2))
gosh> #t

(=zero? (make-complex-from-real-imag 1 2))
gosh> #f
(=zero? (make-complex-from-real-imag 0 0))
gosh> #t
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»