Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!uunet!husc6!rutgers!labrea!jade!ucbvax!VAX.OXFORD.AC.UK!POPX From: POPX@VAX.OXFORD.AC.UK Newsgroups: comp.ai.digest Subject: Prolog Source Library Message-ID: <8712070635.AA14659@ucbvax.Berkeley.EDU> Date: Mon, 7-Dec-87 01:35:15 EST Article-I.D.: ucbvax.8712070635.AA14659 Posted: Mon Dec 7 01:35:15 1987 Date-Received: Sat, 12-Dec-87 07:02:37 EST Sender: daemon@ucbvax.BERKELEY.EDU Organization: The ARPA Internet Lines: 153 Approved: ailist@kl.sri.com From: Jocelyn Paine, St. Peter's College, New Inn Hall Street, Oxford OX1 2DL. Janet Address: POPX @ OX.VAX PROLOG SOURCE LIBRARY I teach AI to undergraduates, as a one-term practical course in the Experimental Psychology degree. For the course, I use Poplog Prolog, on a VAX under VMS. During the course, I talk about topics like scripts, mathematical creativity, planning, natural language analysis, and expert systems; I exemplify them by mentioning well-known programs like GPS, Sam, and AM. I would like my students to be able to run these programs, and to investigate their mechanism and limitations. For students to incorporate into their own programs, I'd also like to provide a library of Prolog tools such as chart parsers, inference engines, search routines, and planners. Unfortunately, published descriptions of the famous programs give much less information than is necessary to re-implement them. As for tools like planners and inference engines: the literature is often more helpful, but I still have to do a lot of work which must have been done before, even if it's merely typing in code from excellent textbooks like "The Art of Prolog". I'm sure other Prolog programmers have this problem too. I have therefore set up a LIBRARY OF PROLOG SOURCE CODE, which I will distribute over the British academic network (Janet) and nets like Bitnet connected to Janet, to anybody who wants it. I will take contributions from anyone who wants to provide them, subject to a few conditions mentioned below. I proposed this in AIList Bulletin V5 267: here are the details of how the library works. If you want to contribute entries, or to request them, please read on... How to send contributions. Please send Prolog source for the library, to user POPX at Janet address OX.VAX (the Vax-Cluster at Oxford University Computing Service). If a file occupies more than about 1 megabyte, please send a short message about it first, but don't send the large file itself until I reply with a message requesting it. This will avoid the problems we sometimes have where large files are rejected because there isn't enough space for them. I accept source on the understanding that it will be distributed to anyone who asks for it. I intend that the contents of the library be treated in the same way as (for example) proofs published in the mathematical literature, and algorithms published in computer science textbooks - as publicly available ideas which anyone can experiment with, criticise, and improve. I will try to put an entry into the library within one working week of its arrival. Catalogue of entries. I will keep a catalogue of contributions available to anyone who asks for it. The catalogue will contain for each entry: the name and geographical address of the entry's contributor (to prevent contributors receiving unwanted electronic mail, I won't include their electronic mail addresses unless I'm asked to do so); a description of the entry's purpose; and an approximate size in kilobytes (to help those whose mail systems can't receive large files easily). I will also include my evaluations of its ease of use, of its portability and standardness (by the standards of Edinburgh Prolog); and my evaluation of any documentation included. Quality of entries. Any contribution may be useful to someone out there, so I'll start by accepting anything. I'm not just looking for elegant code, or logical respectability. However, it would be nice if entries were to be adequately documented, to come with examples of their use, and to run under Edinburgh Prolog as described in "Programming in Prolog" by Clocksin and Mellish. If you can therefore, I'd like you to follow the suggestions below. The main predicate or predicates in each entry should be specified so that someone who knows nothing about how they work can call them. This means specifying: the type and mode of each argument, including details of what must be instantiated on call, and what will have become instantiated on return; under what conditions the predicate fails, and whether it's resatisfiable; any side-effects, including transput and clauses asserted or retracted; whether any initial conditions are required, including assertions, operator declarations, and ancilliary predicates. In some cases, other information, like the syntax of a language compiled by the predicate, may be useful. A set of example calls would be useful, showing the inputs given, and the outputs expected. Use your discretion: if you contribute an expert system shell for example, I'd like a sample rulebase, and a description of how to call the shell from Prolog, and some indication of what questions I can ask the shell, but I don't require that the shell's dialogue be reproduced down to every last carriage return and indentation. For programmers who want to look inside an entry, adequate comments should be given in the source code, together perhaps with a more general description of how the entry works, including any relevant theory. In the documentation, references to the literature should be given, if this is helpful. Entries should be runnable using only the predicates and operators described in "Programming in Prolog" (if they are not, I may not be able to test them!). I don't object to add-on modules being included which are only runnable under certain implementations - for example, an add-on with which a planner can display its thoughts in windows on a high-resolution terminal - but they will be less generally useful. As mentioned earlier, I will evaluate entries for documentation and standardness, putting my results into the catalogue. If I can, I will also test them, and record how easy I found them to use, by following the instructions given. I emphasise that I will accept all entries; the comments above suggest how to improve the quality of entries, if you have the time. Requesting entries. I can't afford to copy lots of discs, tapes, papers, etc, so I can only deal with requests to send files along the network. Also, I can't afford to send along networks that I have to pay to use from Janet. You may request the catalogue, or a particular entry in it. I will also try to satisfy requests like "please send all the natural language parsers which you have" - whether I can cope with these will depend on the size of the library. I will try to answer each request within seven working days. If you get no reply within fourteen working days, then please send a message by paper mail to my address. Give full details of where your electronic mail messge was sent from, the time, etc. If a message fails to arrive, this may help the Computing Service staff discover why. Although I know Lisp, I haven't used it enough to do much with it, though I'm willing just to receive and pass on Lisp code, and to try running it under VAX Lisp or Poplog version 12 Lisp.