It can, for instance, be returned as the value of another procedure. Such dynamically constructed procedures can then be invoked immediately or stored in variables and invoked later, still under program control and without the intervention of the programmer. This possibility has far-reaching consequences, profoundly affecting the way a Scheme programmer approaches certain problems and the style in which may of her programs are written. The standard does not specify whether these types are distinct from values of the other types. Parameter passing When a procedure is called, the arguments are always passed by value, and a similar mechanism is used when the procedure returns a value to the caller.
Programmers can define their own variable-arity procedures.