This is the language I presented two years ago at the 2009 International Lisp Conference. It's finally ready for people to try out.
From the documentation:
Adder is a Lisp-1 which compiles to Python. It aims to integrate seamlessly into Python: every Adder function is a Python function, every Adder list is a Python list, etc.
Python-on-Lisp has been tried before; I think Adder has two advantages that previous attempts did not. The first is technical: Python's metaprogramming has gotten better in the past few years, which allows Adder to integrate more smoothly. The second is social: Clojure has prepared the ground for the notion of a Lisp that integrates into an existing language.
It has one bit of non-Lispy syntax: foo.bar.baz means exactly what it does in Python, and .bar.baz is a function, defined so that (.bar.baz foo) is identical to foo.bar.baz.
...whereupon f(7,1)==3. I suppose I wouldn't really mind if Adder broke that consistently, but I don't think I like the idea of breaking it only for functions that do self-tail-calls.
My main resistance is that I've used languages where you have to use special syntax for a recursive function, and I hate it. But this isn't quite the same thing.
I gave it a quick look and I wonder why would I want to use it? I am a fan of both lisp and python and enjoy trying new languages but why would I want to use it instead of one of those languages? What exactly cool features does it offer?
I have an unreleased/unfinished Scheme to Python interpreter, which is intended to be a full compiler. I'm using trampolining for everything as I wanna be able to support call/cc at some capacity, so there's a factor of slowdown to using it, but it's pretty fun nevertheless.
16 comments
[ 3.4 ms ] story [ 41.8 ms ] threadFrom the documentation:
Adder is a Lisp-1 which compiles to Python. It aims to integrate seamlessly into Python: every Adder function is a Python function, every Adder list is a Python list, etc.
Python-on-Lisp has been tried before; I think Adder has two advantages that previous attempts did not. The first is technical: Python's metaprogramming has gotten better in the past few years, which allows Adder to integrate more smoothly. The second is social: Clojure has prepared the ground for the notion of a Lisp that integrates into an existing language.
It has one bit of non-Lispy syntax: foo.bar.baz means exactly what it does in Python, and .bar.baz is a function, defined so that (.bar.baz foo) is identical to foo.bar.baz.
Does it support tail recursion (in constant space)?
Although that would bind the function name earlier than usual for Python. In Python, you can (in theory) do this:
...whereupon f(7,1)==3. I suppose I wouldn't really mind if Adder broke that consistently, but I don't think I like the idea of breaking it only for functions that do self-tail-calls.My main resistance is that I've used languages where you have to use special syntax for a recursive function, and I hate it. But this isn't quite the same thing.
http://paulbutler.org/archives/tail-recursion-in-python/
Python wouldn't be my first choice, and I'm unconvinced that Lisp-Py makes sense, but I'm sure you'll find ways to adapt it regardless.
http://common-lisp.net/project/clpython/