If there are accumulators, their final values will be returned if no
final-expr is given.
(loop ((:for a (up-from 1 11))
(:acc lst (listing (* a a))))
=> lst)
becomes simply:
(loop ((:for a (up-from 1 11))
(:acc lst (listing (* a a)))))
* README.md: added some small documentation and loop expansion.
* goof.scm: Changed the iterator protocol to not use unnecessary :acc and :fors.
* iterators.scm: see above.
* ref-let.scm: a new macro to allow multiple values and pattern matching to co-exist for body-bindings.
:for clauses now have finalizers! This means (in-file "path") now works. This meant I had to do some restructuring of many nasty pieces of code, but I believe it works. cl-next was broken up into cl-next/acc and cl-next/for. Accumulators have to pass :acc to (cl-next/acc ...). I plan for :for clauses to do the same.
I fixed tests.scm and README.md to reflect the de-racketification of the for loops.
goof.scm
* Changed cl-next to properly push all intermediate loops
* Changed emit-many/rest to emit intermediate loops
* Added loop/list as a shorthand for just accumulating lists.
tests.scm
* Collected some things I wanted ta have to track regressions.
README.md
* Reflect above changes