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
>
Исходник