The
function call syntax of
MPI (the
MUCK one) is actually not too dissimilar in its structure from that of
Lisp or
Scheme. However, since
bare strings in
MPI evaluate to themselves (
i.e. they do not need to be
quoted to be
literals) the overall effect is that of
Scheme crossed with, say,
MUSH's
attribute language.
Here's Space Butler's example reformatted. Note that because the original contains string expressions that have been split up here to illustrate the Lispishness going on, the following will probably not run (well):
{with: awake,,
{foreach: player, {contents:here,player},
{if: {awake:{&player}},
{set:awake,{mklist:{&awake},{name:{&player}}}}
}
},
{color: {nl}~&160
{commas: {&awake},
~&R~&170 and ~&R~&160,player,
{if: {ge: {idle:*{&player}},60},
{&player}~&R~&040
(idle
{div: {idle:*{&player}},60}
m
{mod: {idle:*{&player}},60}
s)
~&R~&160,
{&player}
}
}
}
{color:~&R~&170
{if: {eq:{count:{&awake}},1},
is ,
are
}
awake here.~&R
}
}
As you can see, the
function call syntax resembles Lisp, but uses
curly brackets instead of
parentheses, delimits the function name from the
arguments with a
colon, and delimits arguments themselves with
commas. As a result, MPI's function calls do not share syntax with lists, as Lisp's do: MPI lists are delimited by
carriage return. Nevertheless, MPI is certainly much more of a
functional language than are most
MU* languages.