- Add a `vec` built-in function in step7 so that `quasiquote` does not
require `apply` from step9.
- Introduce quasiquoteexpand special in order to help debugging step7.
This may also prepare newcomers to understand step8.
- Add soft tests.
- Do not quote numbers, strings and so on.
Should ideally have been in separate commits:
- elisp: simplify and fix (keyword :k)
- factor: fix copy/paste error in let*/step7, simplify eval-ast.
- guile: improve list/vector types
- haskell: revert evaluation during quasiquote
- logo, make: cosmetic issues
The identity function is not used in the answers.
Sort list, prn, hash-map by increasing difficulty.
Fix indentation consistency in concat.
Avoid using the same identifier twice.
In do3, make explicit that acc is not used.
In _quasiquote_iter, call the tested quasiquote2 instead of the original quasiquote.
In the quoting section, add foldr_pairs to hide recursions.
The compose function is not used in the answers.
Let `load-file` append a new line in case last line contains a
comment.
Also append `nil` so that the return value is predictible. Remove the
existing explicit `nil` from existing sources.
Adapt documentation and tests.
* Avoid including `lib/*.mal` to prevent unexpected circular
dependencies (bitten by `foldr` using `nth`).
* Ask `quote` before `let*`, the latter requires the former.
Answer previous questions without `let*`.
* Tell the reader that `let*` has various levels of difficulty.
* Drop implicit dependency on `or`, soon out of step files.
* Allow simple recursion in `let*` via a combinator.
Rename the question file for consistency with answer file.
Give an explicit command to copy/paste for tests.
Warn about defining `nth` with `cond`.
Fix typo in let2.
Use tools from core.mal in answers.
It is more interesting to ask an implementation of count from empty?
than the reverse.
Ask for nth, map, concat and conj.
Allow core.mal in answers. Currently, requires the branch with foldr.