Pereira@SRI-AI@sri-unix.UUCP (10/12/83)
It is my view that the ultimate in user convenience will come
from the ultimate in elegance & logical purity. The reason is
simple: elegance & purity make predictability. Now, one sometimes
hears that "elegance & purity" are "too mathematical" for users
to operate conveniently with. I have several arguments agains
this view:
1. It shows a contempt of user's abilities not supported by fact:
each time I have failed to explain "elegant & pure" concepts
to "users" was because I was muddled about them myself.
2. A "pure & elegant" system can more easily be modeled by a program
which will guide the debugging process. This is the philosophy
behind Shapiro's "algorithmic program debugging", which is a model
from which future Prolog debugging tools should greatly benefit.
3. "Convenience for the user" is often a mask for "ignorance and
laziness of the implementer". If an implementer says "I can't
justify this feature on elegance & purity grounds, but it is
convenient for the user" it suggests that he has not thought
through what the user is really trying to do, or can't be bothered
constructing a higher level model of the desired behavior. The
best current debugger for Prolog programs, Lawrence Byrd's one
on DEC-10/20 Prolog (it may exist also in other Prologs I don't
know of) comes from an elegant model of and/or tree search. Type
errors in evaluable predicate arguments should be caught by some
general typing mechanism as Richard suggests, not by "ad hoc"
catches not motivated by semantics which 50% of the time will get
in the way of the user who knows what he is doing.
4. Prolog systems seem unfortunately to be going the way of Lisp
systems, if it doesn't work, add a feature. If Prolog programming
is to survive into the 21st century as the tool of choice for
"reasoning programs", Prolog systems must be cleaner, simpler and
more powerful (more predictable), and that will come only from
better theoretical understanding of what is to be done. The
following are areas from which new systems would most benefit:
- building ideas of algorithmic program debugging
into Prolog systems;
- understanding type checking as compile-time deduction
of a programs consistency with type axioms;
- inventing a logically-motivated module mechanism
-- Fernando Pereira