[net.lang.prolog] Query

Read%UCLA-LOCUS@sri-unix.UUCP (07/16/84)

From:  Walter Read <Read@UCLA-LOCUS>

I hope I can use this forum to get some advice. I am currently
working on trace facilities for a logic programming system and
I would appreciate your opinions on what's needed.

1. Ports

A reasonable division would seem to be 'retry at EXIT and FAIL
ports, 'fail at CALL ports. I notice that C-Prolog leashes CALL
and BACK-TO (REDO)  ports automatically. How useful is leashing
at BACK-TO? How often do you use

?- leash(full).


2. Options

We have 'retry working but a full 'or looks harder. Do
you use 'or  much?  What about other options like
'goal-stack?


3. Cuts

At the moment we have two features that work with !

a.] At a BACK-TO port arrived at when the system has
    "activated" a cut (and so the predicate is automatically
    failed) the system prints PASS: pred  instead of REDO or
    BACK-TO as a warning to the user.

b.] Alternatively there are cut-check and no-cut-check
    options. When  cut-check is set the system shows each
    predicate on backtracking. It might be modified to show
    each cut going "forward" as well.

 Do you know of any Prolog trace systems that do anything
with cut?  Have you had any experience with them?


4. Manipulating the database

We have 'remove, 'restore and a less-than-ideal 'edit
working at the CALL port. On CALL 'remove causes the system to
show the user the relevant  procedure a clause at a time until
he indicates the clause to be removed.  'restore shows the user
the 'remove-d clauses one by one for restoration.  'edit finds
the clause interactively and then, unfortunately, turns the
trace off, although it leaves spy-points and "skip" points alone.
The intention is to allow the user to experiment with the database.

 Do you have any experience with this sort of thing? Is this
the right way to do it?


5. Other

Any other ideas? Any discussion would be helpful, examples
especially so. Thank you.

-- Walt Read