[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
random query rationale
- To: T-Discussion at YALE
- Subject: random query rationale
- From: Drew McDermott <Mcdermott at YALE>
- Date: Mon ,21 Sep 82 13:22:00 EDT
... and another random query: How do you write BOUNDP in T? (Global
value only, of course.)
Rationale: I am creating a subset of ILISP, Franz, and T, so much of
my code will run on any of 3 machines. It won't look like pretty T,
but I am the only one likely to read it. There are good ideas in
all 3 languages (believe it or not), although some of that goodness
is relative to old-fashioned lisp concepts. For instance, Franz
has two functions GETD and PUTD, which get the function definition\n from a symbol, and set it. This is a nice abstraction, since the
value of a GETD in one implementation doesn't have to resemble that
in another implementation in any way; it just has to be the sort of
thing you can give to PUTD. GETD on a macro returns a macro
definition. This is old fashioned in some ways, but so what.
To have this feature in T, GETD must get the global value of a
symbol, unless it's magic, when it must get the magic-val of it.
Hence the need for BOUNDP.
For completeness, I have a function IS-COMPILED, which distinguishes
between EXPRs and SUBRs, etc. I don't think I use for it anything,
but it could be valuable. Kent Pitman pointed out how nebulous this
distinction is; perhaps its practical meaning is, "Test if the original
source of the function is available." Oh well.
IS-MACRO is much more useful. "Processors" (like the compiler or
NISP's DECL macro) need to go over program text, and often do
something special with macros. MACRO-EXPAND fits right in, but
we need a MACRO? test, too.
To implement PUTD, one needs what lisp used to call SET. And something
special for the magic ones. One can use EVAL, but nice people don't