w_title(Lisp2k)dnl
w_doc_id(l2kreadme)dnl

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 (tm)!
 - 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(tm).

I hope you're enthusiastic to get your hands dirty with Lisp2k.
More detailed information is available in w_crosslink(l2kref).

