;;; -*- Mode:LISP; Fonts:(METSI); Base:10 -*- Some comments about LM-PROLOG (... vs other prologs) FEATURES THAT SHOULD BE STRESSED. LM-Prolog is reasonably fast (14K LIPS on a 200ns Lambda, 25K LIPS microcompiled), but more importantly,it has various enhancing features, such as: * Coroutining facilities, so that the execution is driven by the instantiation of variables rather by sequential flow of control. This feature is essential for the implementation of *sound* negation and inequality (lacking in most Prologs), which in turn are critical for the expressive power of Prolog. It is essential for being able to handle potentially infinite data structures (the list of all primes etc.) The feature is also needed for a logical implementation of graphics. It is generally useful for a wide range of programming techniques (`constraints', `spontaneous computations', `perpetual processes', etc.) Its implementation is very efficient. * A `lazy' and an `eager' way of finding all solutions to a query are provided as alternatives to the coroutining facilities. * Multiple databases (worlds), so that parts of the knowledge base can be dynamically turned off and on by programs or by the user. Good for `knowledge engineering', hypothetical reasoning, trace packages, etc. * User-controllable indexing of predicates. Very important in database-like applications. Predicates can be indexed on zero or more arguments or their subparts. Given a query to an indexed predicate, each index yields a set of hits. Then only the intersection of these hits is actually tried. * Prolog's control and data structures are implemented in terms of Lisp's, which makes interfacing between the languages have no overhead. * Debugging facilities includes a trace package in the flavor of DEC-10 Prolog which can trace selective predicates with various options, or single step an execution or parts of it. * Miscellaneous features: Predicates can have variable number of arguments. Prevention or full handling of cyclic structures can be turned on. The unifier and the compiler are user extendable. A large library of built-in predicates and demo programs is included. The language Concurrent Prolog is included as a subsystem. * DEC-10 syntax is not supported but a translating program (written in DEC-10 Prolog) is included, as well as a library of compatibility predicates. Wish List Items: * An explanation feature of the proofs.