#
Complex-number selectors
^{
}

Louis Reasoner tries to evaluate the expression
`(magnitude z)`

where
`z`

is the object shown in figure 2.24. To his surprise, instead of the answer
`5`

he gets an error message from
`apply-generic`

, saying there is no method for the operation
`magnitude`

on the types
`(complex)`

. He shows this interaction to Alyssa P. Hacker, who says ''The problem is that the complex-number selectors were never defined for
`complex`

numbers, just for
`polar`

and
`rectangular`

numbers. All you have to do to make this work is add the following to the
`complex`

package:''

```
(put 'real-part '(complex) real-part)
(put 'imag-part '(complex) imag-part)
(put 'magnitude '(complex) magnitude)
(put 'angle '(complex) angle)
```

Describe in detail why this works. As an example, trace through all the procedures called in evaluating the expression
`(magnitude z)`

where
`z`

is the object shown in figure 2.24. In particular, how many times is
`apply-generic`

invoked? What procedure is dispatched to in each case?

Figure 2.24: Representation of
`3 + 4i`

in rectangular form.