[1] Musical Instrument Digital Interface, a communication protocol for musical data (IMA, 1983)

[2] First and rest used to be called car and cdr, we will use the former naming for clarity.

[3] This is, e.g., a guarantee for applicability of tools that can reason over these programs such as the lambda calculus (Barendregt, 198?).

[4] The double arrow (=>) indicates graphical output.

[5] Actually, Common lisp provides the primitive functions second, third, upto tenth. We will use our own definitions in this chapter.

[6] Note that & is used to distinguishing lambda keywords form normal argument names, therefore avoid using argument names starting with &.

[7] There are many more lambda-list keywords. We will stick to &key, &optional and &rest in this chapter.

[8] This information is not readily accesible by the lisp system (like documentation strings). However, in later chapters we will make some support for this.

[9] In Common Lisp there is a whole variety of equalty predicates specialized and optimized for different data types, equalp is the most general one, however not always the most efficient

[10] In Common Lisp, predicates are often (but not consistently) written ending with a 'p' (from predicate) or a '?', we will use a questionmark for the ones we define ourselves.

[11] cond's can be constructed from nesting multiple if constructs (this is indeed how it is defined in most Common Lisp implementations).

[12] These predicates can take actually take more than two arguments, in which case they test on the order between every two arguments, e.g., (< 1 2 3) will return t, since both (< 1 2) and (< 2 3) are t.

13 In general it is wise to give some thought of what a function should return for not covered values (the code in the t or otherwise clause). Sometimes you even might want to protect a function from certain values and give a warning or an error to the user of that function. For the moment we will not do this. However, in a later chapters we will show some elegant ways of doing so.

[14] This simple form of recursion (called tail recursion) is recognized by any reasonable compiler, and internally transformed into plain iteration, thus overcomming the overhead usually associated with recursion, i.e. extra function calls and increased stack space.

[15] The semitone factor is the [to do: vertaal: de twaalfde machtswortel uit twee] used in the well-tempered tuning system.

[16] This again is tail recursion.

[17] the optional argument result is short for (result nil).

[18] Do not confuse function composition with musical composition