You can see what each expression compiles to by passing it through (print (compile (expand ...)))
For example:
> ((require 'leftpad) "foo" 5)
"00foo"
> (print (compile (expand '((require 'leftpad) "foo" 5))))
require("leftpad")("foo", 5)
And of course, you can use macros to shorten this > (define-macro see (x)
`(print (compile (expand ',x))))
(macro: function)
> (fn (x) (+ x 1))
function
> (see (fn (x) (+ x 1)))
function (x) {
return x + 1;
}
The best way to learn it is to read test.l and mess around with the expressions while running `make test` to see what breaks.If you have questions, be sure to reach out or post them here. The maintainer is also quite responsive to opening new issues.
(That's also why OOP has all these "patterns." Many are just attempts to cope with the "object" metaphor falling apart. "Is" an AttackingRock a Monster, or "is" it an Obstacle? Hmm...)