As promised, I did finally finish the article about the theory of
concatenative combinators, or in other words, what you get when you reduce
Joy down to its bare bores so far that you end up with something comparable
to the pure combinatory logic or lambda calculus. (I haven't really
proofread it, and it seems a bit disorganized, but it has a lot of
information, and it seemed best to put it up now rather than delay longer
and try to fix it up)
It is available at
http://tunes.org/~iepos/joy.html. Manfred, if you'd like
me to put this in the Files section of the group, I can, or you can do it if
you'd like.
By the way, I was browsing tonight and discovered something interesting: a
page describing two languages Iota and Jot
(
http://ling.ucsd.edu/~barker/Iota/), by Chris Barker. It starts with
Unlambda's ideas and takes it a few steps further, to give you an idea of
what this is :-) In, particular what he did with Jot is particularly novel;
in essense, it is like a concatenative language with only two words, "0" and
"1", which have these effects:
0 == [k] [s]
1 == cons
What's fascinating is that you can get "s" and "k" back out, like this:
k == 0 0 1 1 1
s == 0 0 0 1 1 1 1 1
In Jot's notation we write "0 0 1 1 1" as just "11100" (Jot has a prefix
heritage, so we simply reverse the whole string from as it would be written
in Joy). Anyhow, being able to get "s" and "k" out and having "cons" gives
us a sort of completeness (it gives us the ability to construct a quotation
of any applicative combinator)
Now, the big question: can a similar or better completeness be generated
using only two true combinators? (the above "0" is not a true combinator).
To start, we know that the base {[], take, i, cat, dup, zap} would do it,
except that it has 6 combinators in it instead of 2.
- Brent