There is no dependence on some surrounding environment of global variables or any history of past actions. This means that each such procedure can be completely understood and thoroughly tested independently of all the others. Higher-order functions that generalize patterns with procedure arguments are used, instead of code that does one specific task. Lambda expressions can define new functions where needed and match already defined functions to a particular context. Recursion can also be used for repetition.
Lists can also represent programs.
The language interpreter is an ordinary procedure that can be called from a user's program. The interpreter is a meta-circular definition of the language.