A procedure can be constructed as a value during the execution of the program itself. 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.
Programmers can define their own variable-arity procedures.