[1] The name undefined is predeclared in any JavaScript implementation and should not be used other than to refer to that primitive value.
[2] We use the list (rectangular) list("rectangular") rather than the symbol rectangular string "rectangular" to allow for the possibility of operations with multiple arguments, not all of the same type.
[3] 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.
Original JavaScript
Apply-generic uses the dotted-tail notation described in exercise 2.20, because different generic operations may take different numbers of arguments. In apply-generic, apply_generic, op has as its value the first argument to apply-generic apply_generic and args has as its value a list of the remaining arguments.
Original JavaScript
Apply-generic also uses the primitive procedure apply, which takes two arguments, a procedure and a list. Apply applies the procedure, using the elements in the list as arguments. The function apply_generic uses the function apply_in_underlying_javascript given in section 4.1.4 (footnote 2), which takes two arguments, a function and a list, and applies the function, using the elements in the list as arguments.
For example,
Original JavaScript
(apply + (list 1 2 3 4)) apply_in_underlying_javascript(sum_of_squares, list(1, 3))
returns 10.
[5] One limitation of this organization is it permits only generic procedures functions of one argument.
2.4.3   Data-Directed Programming and Additivity