
Constraint Logic Programming in Pop-11
Quote:
> Date: 7 Feb 2002 10:42:52 -0800
> Does anyone know of a constraint programming library for pop11? I
> have had a good look on the web but not come up with anything.
> Paul
I don't think anyone replied to this. I was very busy at the time and
forgot to respond.
A lot depends on what sort of constraint programming is required. I am
sure there is no general purpose constraint programming library.
There are a few things that may be relevant.
There is a very old library LIB RMS (reason maintenance system) by
Bob Searle and Chris Mellish, which is part of the standard Poplog
distribution, and described in HELP RMS
http://www.*-*-*.com/
| LIB RMS
|
| The RMS deals with information in the form of NODES, which represent facts
| that are believed (IN) or disbelieved (OUT). The procedure for creating a new
| node is MAKENODE, which takes as its argument any structure which when printed
| out gives a readable rendering of what the fact is. For instance:
etc.
There is also a very old library LIB VED_VCALC which is a sort of
VED-based spreadsheet. It is also included with Poplog and is described
in HELP VCALC
http://www.*-*-*.com/
| LIB VED_VCALC allows collections of values of variables to be
| manipulated, with consequences of any change automatically
| computed and displayed on the screen. Constraints can be
| specfied, and if violated will cause an error message.
|
| E.g. you could have an array of numbers, and after changing one
| number the relevant row and column totals, averages, etc. could
| be automatically re-computed. Constraints on their bounds can be
| set, to ensure that reasonable values are given. VCALC makes it
| easy to experiment with different combinations of numbers,
| automatically checking that user-defined constraints are not
| violated. E.g. it has been used to draft a grant application
| subject to a specified upper bound on the total funding
| requested.
|
| Since July 1986 negative numbers, decimals, ratios or complex
| numbers can all be handled.
|
| It is also possible to manipulate non-numeric objects, such as strings,
| words or lists. Since all the resources of POP-11 and VED are available
| to the user of VCALC, it is potentially an extremely powerful tool.
Although potentially fairly powerful the interface is not very good: you
have to edit a Ved file respecting various rather awkward conventions,
and the output appears in the same file.
As part of the Poprulebase Package available from the Free Poplog
Website
http://www.*-*-*.com/
either within the sim_agent toolkit or separately, there is a
facility for recording and manipulating dependences, mainly designed by
Brian Logan. Poprulebase is described here:
http://www.*-*-*.com/
and the dependency manipulation actions are described here:
http://www.*-*-*.com/
| [DADD ...]
| This format is used to insert a new database datum along with information
| about which other database items it depends on. It allows multiple
| sufficient justifications for the same thing to be recorded.
|
| [DDEL ...]
| This format is used to remove a database datum, which will also
| automatically remove any items which depend on it if they no longer have
| a justification remaining.
The objectclass library included in Poplog can be used to implement some
constraint manipulations by defining methods so that they invoke other
methods. In objectclass, as in CLOS, methods are "generic functions",
i.e. the appropriate method definition to be selected when a method is
applied to a collection of objects depends on the classes of all the
objects: it does not select using the type of just one of the objects as
in more common OO languages.
There is a lisp library by Jeff Siskind called Screamer which has been
ported to poplog common lisp, which implements fairly powerful
constraint manipulation tools as far as I remember. The version that
runs in poplog can be fetched from here:
http://www.*-*-*.com/
(about 450 Kbytes.)
The screamer package could be invoked from Pop-11, but I don't know how
easy that would be.
Here's an extract from the FAQ included in the package.
| Screamer is an extension of Common Lisp that adds support for nondeterministic
| programming. Screamer consists of two levels. The basic nondeterministic
| level adds support for backtracking and undoable side effects. On top of this
| nondeterministic substrate, Screamer provides a comprehensive constraint
| programming language in which one can formulate and solve mixed systems of
| numeric and symbolic constraints. Together, these two levels augment Common
| Lisp with practically all of the functionality of both Prolog and constraint
| logic programming languages such as CHiP and CLP(R). Furthermore, Screamer is
| fully integrated with Common Lisp. Screamer programs can coexist and
| interoperate with other extensions to Common Lisp such as CLOS, CLIM and
| Iterate.
Maybe someone would like to try porting Screamer to
Pop-11. The sizes of the common lisp files as reported by "wc" are
Lines words characters
385 1367 10757 screamer/equations.lisp
3433 14509 119489 screamer/iterate.lisp
965 4783 29876 screamer/primordial.lisp
6902 25699 245326 screamer/screamer.lisp
715 2348 22452 screamer/screams.lisp
12400 48706 427900 total
The home of Screamer seems to be
http://www.*-*-*.com/ ~screamer-tools/home.html
Don't fetch the version from there: it needs some minor changes
to run in Poplog Common Lisp, already in the screamer.tar.gz
file above.
Aaron
====
Aaron Sloman, ( http://www.*-*-*.com/ ~axs/ )
School of Computer Science, The University of Birmingham, B15 2TT, UK
PAPERS: http://www.*-*-*.com/ (And free book on Philosophy of AI)
FREE TOOLS: http://www.*-*-*.com/