Упражнение 2.80.

Jul 12, 2011 14:04


Originally published at Записки сумасшедшего. Please leave any comments there.

Определите обобщенный предикат =zero?, который проверяет, равен ли его аргумент нулю, и вставьте его в пакет обобщенной арифметики. Предикат должен работать для обычных, рациональных и комплексных чисел.

Тоже вроде ничего сложного:

(put '=zero? '(scheme-number) (lambda (x) (= x 0))) (put '=zero? '(rational) (lambda (x) (=zero?-rat x))) (define (=zero?-complex z1) (and (= (real-part_my z1) 0) (= (imag-part_my z1) 0)))
Результат:

install-scheme-number-package ... done install-rational-package ... done install-rectangular-package ... done install-polar-package ... done install-complex-package ... done > (=zero? (make-complex-from-mag-ang 0 1)) #t > (=zero? (make-complex-from-mag-ang 1 0)) #f > (=zero? (make-rational 0 0)) . . Знаменатель не должен быть равен 0 > (=zero? (make-rational 0 1)) #t > (=zero? 0) #t > (=zero? 1) #f >
Исходник

sicp, scheme

Previous post Next post
Up