The First Commandment
When recurring on a list of atoms, lat, ask two questions about it: (null? lat) and else. When recurring on a number, n, ask two questions about it: (zero? n) and else. When recurring on a list of S-expressions, l, ask three questions about it: (null? l), (atom? (car l)) and else.
The Fourth Commandment
Always change at least one argument while recurring. When recurring on a list of atoms, lat, use (cdr lat). When recurring on a number, n, use (sub1 n). And when recurring on a list of S-expressions, l, use (car l) and (cdr l) if neither (null? l) nor (atom? (car l)) are true. It must be changed to be closer to termination. The changing argument must be tested in the termination condition: when using cdr, test termination with null? and when using sub1, test termination with zero?
The Sixth Commandment
Simplify only after the function is correct.
The Seventh Commandment
Recur on the subparts that are of the same nature: on the sublists of a list; on the subexpressions of an arithmetic expression.
The Eigth Commandment
Use help functions to abstract from representations.
The Thenth Commandment
Build functions to collect more than one value at a time.
car non-empty list the first S-expression of the list
cdr non-empty list (could-er) the list of S-expression that aren't the car
cons a l cons a into l
define name value give name to value
lambda arg body create procedure
cond questions list of questions to answer
else instruction one of the questions
eq? a1 a2 #t when a1 = a2
null? l #t when empty list
atom? a #t when atom
number? a #t when number