SICPゼミ第36回
練習問題2.78からやり直し
練習問題2.78
(define (attach-tag type-tag contents) (if (eq? type-tag 'scheme-number) contents (cons type-tag contents ))) (define (type-tag datum) (if (pair? datum) (car datum) (if (number? datum) 'scheme-number (error "Bad tagged datum: TYPE-TAG" datum )))) (define (contents datum) (if (pair? datum) (cdr datum) (if (number? datum) datum (error "Bad tagged datum: CONTENTS" datum ))))
by pine
練習問題2.79
(define (install-equ?) (put 'equ? 'scheme-number (lambda (x y) (= x y))) (put 'equ? 'rational (lambda (x y) (and (= (car x) (car y)) (= (cdr x) (cdr y))))) (put 'equ? 'complex (lambda (x y) (and (= (real-part x) (real-part y)) (= (imag-part x) (imag-part y))))))
練習問題2.80
(define (install-=zero?) (put '=zero? 'rational (lambda (x) (= (car x) 0))) (put '=zero? 'scheme-number (lambda (x) (= x 0))) (put '=zero? 'complex (lambda (x) (and (= (real-part x) 0) (= (imag-part x) 0)))))
by dolicas
練習問題2.87
(put '=zero? 'polynomial (lambda (x) (null? (cdr x))))