Removed defmacro! related code: imported code from defmacro-enhance, which took the code from the book, and made a more portable version of the code-walking. It is actively maintained and used by many projects. There's a difference in usage (as described in the defmacro-enhance's README): g!symbols becomes g!-symbols, and o!symbols don't map to g!symbols: o!symbols becomes o!-symbols and map to o!-symbols;
Code from Paul Graham's On Lisp (like symb or flatten) was removed and imported from the source;
Removed the #> reader-macro: changed to cl-heredoc (as described in the errata);
Added the file readtable.lisp, with all the read-macro related stuff, with a package called let-over-lambda.readtable (with a nickname of lol.rt);
Added the line (cl-reexport:reexport-from :lol.rt) at the end of the package.lisp file: it uses the cl-reexport package and reexports from the lol package all symbols from lol.rt. That way, one can (:import-from :let-over-lambda ...) without having to know if the symbol is in the lol package or in the lol.rt package;
Improved the #~ reader-macro: added support for Perl-like balanced regex delimiters. Ex: (#~m<abc> ...). Matching delimiters inserted are in matching-delimiters;
Changed the frunction called from the #~m reader-macro: instead of ppcre:scan, now it call ppcre:scan-to-strings as it was found to be more practical in daily usage;
Changed if-macro: it allow nesting and binds $n local variables accordingly.
TODO:
Wait for the on-lisp package to become available in Quicklisp (I already created an issue, and hope that @DalekBaldwin will agree);
Add some tests and check implementation independence (I can do it). Maybe add some examples from the book and put many corner cases to check compatibility with the code from the book (it can be done easily with Travis CI);
Update the README, explaining the API and adding links to the code in the site (I can do it too =p );
Add docstrings to functions and macros (And this too =p );
I'd also add some functions and macros from the book that didn't make in the production version of the code, but that I found out to be very useful in daily usage:
This was a bigger refactor of the code. Changes:
defmacro!
related code: imported code from defmacro-enhance, which took the code from the book, and made a more portable version of the code-walking. It is actively maintained and used by many projects. There's a difference in usage (as described in thedefmacro-enhance
's README):g!symbols
becomesg!-symbols
, ando!symbols
don't map tog!symbols
:o!symbols
becomeso!-symbols
and map too!-symbols
;symb
orflatten
) was removed and imported from the source;#>
reader-macro: changed to cl-heredoc (as described in the errata);readtable.lisp
, with all the read-macro related stuff, with a package calledlet-over-lambda.readtable
(with a nickname oflol.rt
);(cl-reexport:reexport-from :lol.rt)
at the end of thepackage.lisp
file: it uses the cl-reexport package and reexports from thelol
package all symbols fromlol.rt
. That way, one can(:import-from :let-over-lambda ...)
without having to know if the symbol is in thelol
package or in thelol.rt
package;#~
reader-macro: added support for Perl-like balanced regex delimiters. Ex:(#~m<abc> ...)
. Matching delimiters inserted are inmatching-delimiters
;#~m
reader-macro: instead ofppcre:scan
, now it callppcre:scan-to-strings
as it was found to be more practical in daily usage;if-macro
: it allow nesting and binds$n
local variables accordingly.TODO:
if-match
macro (I can try it)