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.