TOY Prolog ST - English edition ------------------------------Contents of disk ---------------TOY.PRG SYSFILE.TOY ) ) The TOY Prolog interpreter PROLOG.DOC 53-page manual, translated from German README.DOC The file you are reading BOOTER.TOY ) EDITOR.TOY ) CALLTREE.TOY ) Auxiliary programs in intermediate code - see section 4 of manual TICTAC.TOY Noughts & crosses demo (intermediate code) (manual, p.42) \SOURCE\ folder: programs in Prolog (in English originally): MONITOR.PRO Source code for user interface (p.47) EDITOR CALLTREE ) ) Source code for auxiliary programs (pp.38-39) ALPHA TOYSEQ TICTAC.TOE ) ) ) Demonstration programs (pp.40-42) \DEMOS\ folder: more Prolog programs (translated from German): TOYDEMOS FAMILY COLOURS QUIKSORT graphics demo, access to disk directory, + a simple recursive tab function logic of family relationships colouring a map with 4 colours sorting lists Introduction -----------Welcome to Prolog - PROgramming in LOGic - the 'fifth generation' language currently replacing LISP as the language of choice for artificial intelligence programming. A few lines of Prolog can do things that would take pages of code in a conventional language like Pascal, C or BASIC. But as it is fundamentally different from sequential/algorithmic languages like these (and also from other, less conventional computer languages), you have a whole set of new concepts to learn before you can make much use of its power. It is not just the jargon that's weird and unfamiliar, but the whole philosophy of programming that Prolog terminology describes. Let's face it, it takes a book to explain what Prolog is all about. The manual describes this particular implementation pretty thoroughly, but it does not set out to be an introductory text it assumes you already know what words like 'arity' and 'principal functor' mean. So if you do want to learn Prolog you will have to get a book about it. The standard text is the one by Clocksin & Mellish, mentioned in the manual. A short and comparatively cheap book that I am finding quite helpful, though it does not cover everything in TOY Prolog, is J.Doores, A.R.Reiblein & S.Vadera: Prolog - Programming for Tomorrow. Sigma Press, Wilmslow, Cheshire, 1987. œ10-95. If you do not have a textbook to refer to yet, just in case reading the manual still leaves you wondering where to start, the following notes may help you get going with this package. Using TOY Prolog ---------------Run TOY.PRG from the desktop, with SYSFILE.TOY present on the same directory. You should eventually get a message saying the program is listening and a prompt, ?followed by a blinking cursor. Now you are supposed to enter a valid Prolog clause, terminated by a full stop. This sets Prolog a goal, which it will attempt to satisfy. In some cases, a lot of printout can be generated on the way, but eventually the goal will either succeed or fail, and Prolog will respond 'yes' or 'no' respectively, and give you another '?-' prompt. E.g. you can set Prolog problems in simple arithmetic such as ?- sum(27,34,X). or ?- sum(X,3,-11). Here X, being a sequence of alphanumeric characters beginning with a capital letter, is interpreted as a variable, and Prolog will give it a value. To get a new prompt, type a full stop and Return. Or you can ask ?- 32*48 > 1024/3. or ?- 'neil' @< 'margaret'. and just get 'yes' or 'no'. To quit TOY Prolog, just type stop. Loading a program ----------------In principle, you can enter complicated predicates directly like this, but it is not very convenient. For one thing, if you make a mistake you have to type the whole line again. It is generally easier to create a Prolog program outside the interpreter, using your favourite programming editor, and load it in from disk when Prolog is running. Once loaded, it can be modified using the editor provided. There are two ways of loading programs. A program in Prolog source code is loaded with 'consult'. E.g. to load the example program FAMILY from drive B you enter ?- consult('b:\demos\family'). whereupon Prolog will read it in, echoing it all to the screen, stopping to execute commands (beginning with ':-') when it comes to them, until it comes to the 'end.'. At that point the goal has been satisfied, so Prolog prints 'yes' and returns control to the keyboard. This is very slow, so another method is also provided. Once your program is fully debugged, you can translate it into intermediate code as described in the manual, generating a '.TOY' file, which can then be loaded very quickly with 'sysload'. E.g. to load the editor you enter ?- sysload('b:\editor.toy'). Once a program has been loaded, the information it contains remains in Prolog's built-in database. You can call predicates in it, and ask questions using the facts and rules it contains. E.g. after loading FAMILY, you can enter ?- parent(X, jesus). and Prolog will answer X is joseph leaving the cursor on the same line. If you type a semicolon (and Return), it will resatisfy this goal with another solution, X is mary This time, attempting to resatisfy the goal fails, there are no more solutions. There is plenty of study material in the example programs, and it is worth printing listings of them as well as of the manual. This translation ---------------TOY Prolog was written in Warsaw and published in an Englishlanguage book, which unfortunately I have not been able to obtain. This Atari ST version was created in Germany and released as a public domain package with German documentation. This English version of the package is the same except that I have translated the documentation into English and edited it into a single document, adding a fuller table of contents and two indexes (one of the GEM functions by their standard names); translated the comments in the example programs; and added this README file. One or two little mistakes I happened to spot in the German documentation have been corrected, but I cannot guarantee the rest is perfect! Once upon a time, the German documentation appears to have been in FirstWord format, with some names and symbols distinguished by bold type. By the time it reached me, it was in ASCII and this distinction had been lost - sorry if this adds any confusion. Being a beginner in Prolog, not particularly familiar with German, and without access to the original source book, I can hardly have avoided an occasional slip or deviation from the norms of TOY Prolog terminology, however it seems preferable to release the translation in its present form rather than sitting on it just because I might be able to do it better with another year's experience. Though my contribution is small compared with that of the professionals who wrote the program, still translating over 100k of files as technical as this is by no means a negligible task, in fact it amounted to several weeks' work all told. And while they were no doubt paid for their work, I don't get a penny for mine. So if you would like to encourage me to help make more of the excellent PD software that comes from Germany available in English via the ST Club, why not send me a donation? Martin Willson, 1 Bincleaves Road, Weymouth, Dorset DT4 8RL.