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