Селекторы комплексных чисел
Хьюго Дум пытается вычислить выражение
(magnitude z)
, где
z
— объект, показанный на рис. 2.24. К своему удивлению, вместо ответа
5
он получает сообщение об ошибке от
apply-generic
, гласящее, что у операции
magnitude
нет методов для типа
(complex)
. Он показывает результат Лизе П. Хакер. Та заявляет: ''Дело в том, что селекторы комплексных чисел для чисел с меткой
complex
определены не были, а были только для чисел с меткой
polar
и
rectangular
. Все, что требуется, чтобы заставить это работать — это добавить к пакету
complex
следующее:''
(put 'real-part '(complex) real-part)
(put 'imag-part '(complex) imag-part)
(put 'magnitude '(complex) magnitude)
(put 'angle '(complex) angle)
Подробно опишите, почему это работает. В качестве примера, проследите все процедуры, которые вызываются при вычислении
(magnitude z)
, где
z
— объект, показанный на рис. 2.24. В частности, сколько раз вызывается
apply-generic
? На какую процедуру она диспетчирует в каждом случае?
Рис. 2.24. Представление
3 + 4i
в декартовой форме
Комментарии отсутствуют.