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