4 ms·
It could be trivially implemented in Lua as a pre-processor. Lua has lambdas, higher level functions, lexical scope and tail call elimination. The main problem
by pygy_ 13y ago
It could be trivially implemented in Lua as a pre-processor. Lua has lambdas, higher level functions, lexical scope and tail call elimination.
The main problem is that it doesn't have a ternary operator, making conditional expression problematic to represent (you have to wrap an if statement in a lambda called on the fly).
For something more fully featured, see [0], it is written in MoonScript (which itself compiles to Lua), and the parser depends on LPeg, but writing a S-expression parser is rather easy.
Edit: There's also lcl [1], which is implemented in C. Written by lhf, one of the Lua authors. From the test files, it looks very basic.
--
[0] https://github.com/leafo/moonlisp/tree/master/lisp https://github.com/leafo/moonlisp/tree/master/lisp
[1] http://www.drdobbs.com/open-source/lua-an-extensible-embedded-language/184410014 http://www.drdobbs.com/open-source/lua-an-extensible-embedde...
- _mpu 13y agoWrapping an if in a lambda is unlikely to work as expected.
- pygy_ 13y ago((if foo + -) 4 6) Can be compiled to (function() if foo then return plus else return minus end end)()(4, 6) It is far too verbose to be used in manually crafted Lua, but acceptable if you treat it as a compiler target (with the caveat that the lambda creation will prevent LuaJIT from JITting that piece of code).
- meric 13y agoPlug https://github.com/meric/l2l https://github.com/meric/l2l "A object-oriented, unicode-enabled lisp that compiles to and runs as fast as Lua. Equipped with macros and compile-time compiler manipulation. Comes with all built-in Lua functions."