Introduction and misc ideas

Alexis Read
Mon Jun 24 08:53:03 2002

On Mon, 17 Jun 2002, Brian T Rice wrote:

> You're right about all of those comments, but notice that I didn't claim
> that the syntax was technically flawed. I'm more concerned with
> programmatic manipulability. The fact that Maude hasn't been released
> Freely (yet) is part of the issue. Other factors I'll mention below.

The word from their main programmer is a maude 2.0 release in autumn this
year, probably including source.

> AR>In the case of LISP, and Maude, I don't see which has the more
> AR>advantageous syntax.
> It's simple: I don't want there to be a syntax or a language, and
> machine-manipulable syntax is the key to that. Maude is also notably
> missing a backquote and unquote operations, which makes the meta-level
> rough to deal with, and SEXP syntax is the only one I know that handles
> that generically.

If I've got this correct, QUASIQUOTE and UNQUOTE are syntactic
meta-operators to build partial expressions, remarkably similar to Maude's
UP and DOWN operators ;o).
KWOTE (the opposite of EVAL, the process of finding the end value of an
expression) is formed as META-REDUCE, with REDUCE == EVAL.
' is just the same as in LISP (ie. QUOTE), it refers to the meta-data of
an object.

I believe Joy has quasiquote and unquote, however Joy has its own problem
with quoting in that lists and quotes are deliberately separated
(syntatically the same, but lists can use operators which examine the
insides of the list, like first, rest and size).

It seems to me that quasiquote and unquote superseed quote in a
partially-evaluated environment ie. eval and kwote are 'eager', and
quasiquote and unquote are lazy, with quote having no use.

So all 3 language types (LISP, Maude, Joy) seem to have a machine
manipulable syntax, I believe all 3 can do rewriting, and adding partial
evaluation, and a module system should be easy in either of them.

On the subject of module systems, macros seem to make little sense in a
partially evaluated system - everything should be defined for runtime
execution with a set of 'caching' or state attributes (for late binding).