[1] We use the list list("rectangular") rather than the string "rectangular" to allow for the possibility of operations with multiple arguments, not all of the same type.
[2] The type the constructors are installed under needn't be a list because a constructor is always used to make an object of one particular type.
[3] In apply_generic, op has as its value the first argument to apply_generic and args has as its value a list of the remaining arguments.
The function apply_generic also uses the primitive function apply, which takes two arguments, a function and a list. The function apply applies the function, using the elements in the list as arguments. For example,
apply(sum_of_squares, list(1, 3))
returns 10.
[4] One limitation of this organization is it permits only generic functions of one argument.
2.4.3 Data-Directed Programming and Additivity