Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.3 4.3bsd-beta 6/6/85; site ucbvax.BERKELEY.EDU Path: utzoo!decvax!ittatc!dcdwest!sdcsvax!ucbvax!nmsu.CSNET!ted From: ted@nmsu.CSNET Newsgroups: mod.ai Subject: turbo prolog Message-ID: <8606260655.AA27553@ucbvax.Berkeley.EDU> Date: Sun, 22-Jun-86 14:54:16 EDT Article-I.D.: ucbvax.8606260655.AA27553 Posted: Sun Jun 22 14:54:16 1986 Date-Received: Thu, 26-Jun-86 19:27:36 EDT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The ARPA Internet Lines: 24 Approved: ailist@sri-ai.arpa Recent reviews have correctly pointed out that turbo prolog's attempt to enforce type checking has both good and bad points and that the speed is not very impressive, since much of the unification can be done at compile time if data types are known. The major difficulty with Borland's approach to adding strong typing to prolog is the loss of higher-order predicates. Since a domain can be at most the disjunction of a small number of _predeclared_ terms, it is impossible to write a general higher- order procedure. This means that you can't write findall, as described in Clocksin and Mellish (Borland has of course, in their wisdom, provided such a function). The function doall also cannot be written. It is handy as a substitute for findall when the predicate Q is executed for effect only. doall(Q) :- Q,fail. doall(_). First class procedural objects are, in many senses, a much more fundamental distinction between symbolic and conventional languages than are heap allocated data structures. Their loss makes many advanced applications nearly impossible.