Lisp2k
Lisp2k is an participation in the essies2004 competition / event. It
tries to combine all the power of Lisp with a modern, 21st century
environment, while remaining true to its real goals (this is supposed to
be esoteric programming). In particular, it features:
- programs that can (and must) inspect themselves at runtime;
- a handy symbol value type;
- a mutable symbol table for globals, enabling you to build a
reflective programming enrironment;
- excellent support for dynamic scoping;
- I/O facilities comparable to those of Common Lisp;
- relatively good macro support, no added hygiene;
- low on syntax, letting you define all those wonderful weird
characters to do your own favourite stuff ™!
- modern pseudo-markup for program structure, especially indentation
sensitivity ^_^
- dynamic typing
- and last, but not least, a good portion of those famous
quote
unquote
services.
On the other hand, Lisp2k is:
- based on a Forth-like evaluator
- functions, not their callers, decide how much parameters they get.
Notation is Lispishly prefix, though. Lisp2k does not re-evaluate
expressions after evaluation, you have to request that yourself.
This sometimes makes composing functions tricky.
- intended to be a minimal system
- the primitive operations of Lisp2k are few, even more so than for
ordinary Lisps. For example, there is no (car). (Lisp2k tries
to gain new ground in the Turing Tarpit art, extending the functional
world away for idemponent environments like the lambda calculus.)
- properly tail recursive
- Lisp2k does not have primitives for looping, so this is a must.
- not natively equipped with a REP loop
- you could write one, though. A reader and printer are already
available. Lisp2k lacks all other kinds of runtime services, too.
Implementing a proper support library might be a future project.
- intended to be hard to use, yet provide powerful abstractions
- in the field of esoteric programming languages, most
really-hard-to-use ones have been imperative, and promising rivals on
the functional side have had automatic code generators available.
Lisp2k is meant to be sufficiently far from well-known research areas
so as to prevent trivial mappings from a well-known formalism to
Lisp2k.
- natively pattern-matching
- Pattern matching helps to reduce the number of primitives in the
language. Besides, it's a Good Thing™.
I hope you're enthusiastic to get your hands dirty with Lisp2k.
More detailed information is available in Lisp2k language reference.