Procedures are the driving force of programming languages because that's where the static data is actually processed. So far we have used a number of procedures that are provided by Scheme or have been defined by Guile or LilyPond. Now we're going to “roll our own”, and that's about where the fun starts (i.e. where we start being able to achieve something useful).
Procedures are created using the lambda
expression, that is: a lambda
expression evaluates to a procedure. At the core of things even the
fundamental language features are expressed as evaluating expressions! This
also means that procedures are values just like every other value in Scheme.
So procedures can be used like any other value, e.g. bound to different names,
stored in pairs or whatever. We will discuss this in more detail in the
following chapters.
There are different ways lambda
-generated procedures handle arguments, which
is important enough to warrant a dedicated chapter. Some words have to be spent
on the binding of procedures to names, which is how procedures can actually be
made useful. And finally we will have a closer look at a specific type of
procedures: predicates. The main use of this chapter is to get some practise
with writing procedures.