Title: The Little Schemer (by CodeCop)

Q: 1st Commandment
A: When recurring on a something, ask questions about it.

Q: 2nd Commandment
A: Use `cons` to build lists.

Q: 3rd Commandment
A: When building a list, describe the first typical element, and then `cons` it onto the natural recursion.

Q: 4th Commandment
A: While recurring change at least one argument closer to termination.

Q: 4th Commandment part 2
A: While recurring the changing argument must be tested in the termination condition.

Q: 5th Commandment
A: When (recurring) building a value, for the value of the terminating line use neutral.

Q: 6th Commandment
A: Simplify only after the function is correct.

Q: 8th Commandment
A: Use help functions to abstract from representations.

Q: 9th Commandment
A: Abstract common patterns with a new function.

Q: 10th Commandment
A: Build functions to collect more than one value at a time.

Q: When recurring on a something, ...
A: ask questions about it.

Q: Use `cons` to ...
A: build lists.

Q: When building a list, ...
A: describe the first typical element, and then `cons` it onto the natural recursion.

Q: While recurring change ...
A: at least one argument closer to termination.

Q: While recurring the changing argument must be ...
A: tested in the termination condition.

Q: When (recurring) building a value, for the value of the terminating line use ...
A: neutral.

Q: Simplify only after ...
A: the function is correct.

Q: Use help functions to ...
A: abstract from representations.

Q: Abstract common patterns with ...
A: a new function.

Q: Build functions to ...
A: collect more than one value at a time.

Q: Build lists with ...
A: `cons`.

Q: To abstract from representations use ...
A: help functions.

Q: To collect more than one value at a time build ...
A: functions.

Q: When recurring on a list of atoms, `lat`, ask two questions about it: [...]
A: `(null? lat)` and `else`.

Q: When recurring on a number, `n`, ask two questions about it: [...]
A: `(zero? n)` and `else`.

Q: When recurring on a list of S-expressions, `l`, ask three question about it: [...]
A: `(null? l)`, `(atom? (car l))`, and `else`.

Q: When recurring on a list of atoms, `lat`, use [...] to change the argument.
A: `(cdr lat)`

Q: When recurring on a number, `n`, use [...] to change the argument.
A: `(sub1 n)`

Q: When recurring on a list of S-expressions, `l`, use [...] to change the argument.
A: `(car l)` and `(cdr l)` if neither `(null? l)` nor `(atom? (car l))` are true

Q: When recurring the changing argument must be tested in the termination condition: When using `cdr`, test termination with [...]
A: `null?`

Q: When recurring the changing argument must be tested in the termination condition: When using `sub1`, test termination with [...]
A: `zero?`

Q: When (recurring) building a value with `+`, always use [...] for the value of the terminating line.
A: `0`

Q: When (recurring) building a value with `*`, always use [...] for the value of the terminating line.
A: `1`

Q: When (recurring) building a value with `cons`, always consider [...] for the value of the terminating line.
A: `()`

Q: Recur on the sub parts that are of the same nature: On the [...] of a list.
A: sub-lists

Q: Recur on the sub parts that are of the same nature: On the [...] of an arithmetic expression.
A: sub-expressions

Q: `car` is defined only for [...].
A: non-empty lists

Q: `cdr` is defined only for [...]. The `cdr` of any [...] is always another list.
A: non-empty lists

Q: `cons` takes two arguments. The second argument to cons must be a [...]. The result is a list.
A: list

Q: `null?` is defined only for [...].
A: lists

Q: `eq?` takes two arguments. Each must be a [...].
A: non-numeric atom

Q: `cons` takes how many arguments?
A: two

Q: What is the result of `cons`?
A: a list

Q: `eq?` takes how many arguments?
A: two