Chapter 2, Building Abstractions with Data
Section - 2.5 - Systems with Generic Operations
Exercise 2.77
The expression (magnitude z)
fails initially because it results in a call to apply-generic
. As per figure(mentioned in question), z
is tagged with complex
,
thus apply-generic
will lookup in the data directed table using get
. Since magnitude
is not stored in the table corresponding to complex
, it results in
error - “no method for the operation magnitude on the types (complex)”.
After adding the put
statements, the error disappears because it adds magnitude
to the table.
Now after the first call to apply-generic
, it will result in (magnitude zz)
where zz
is (content z)
. Thus zz
is of type ‘rectangular` as can be seen form the figure.
Now this will again invoke apply-generic
which will invoke magnitude
from the rectangular
package. And which will finally return the magnitude
.
Thus there are two invocations of apply-generic
.