cdsm@icdoc.UUCP (06/28/85)
Implementations of CUT As part of the BSI Prolog standardisation process I am looking at the way in which cut is implemented in different Prolog systems. The following program illustrates the differences which have been found. I would be grateful if you could run the program on your system and send me the answers; if you have an interpreter and compiler please execute it for both systems. --------------------------------------------------------- /* Tests to distinguish various implementations of cut */ /* Chris Moss, Imperial College, June 1985 */ test1 :- do('Testing that cut is implemented). ', t1). test2 :- do('Test if cut acts within disjunction', t2). test3 :- do('Test if it cuts previous choices within disjunction', t3). test4 :- do('Test if cut acts when passed as metacall', t4). test5 :- do('Test if & cut acts within metacall', t5 ). test6 :- do('Test if cut acts through not', t6). do(Message,Test) :- w(Message), Test. do(Message,Test) :- w('Does act'). w(X) :- write(X), nl. t :- w('Does not act'). t1 :- (true;w('Did not cut alternatives correctly'),fail), !, w('Succeeds going forwards'), fail. t1 :- w('Failed to cut goal'). t2 :- (!;w('Fails to cut disjoint alternatives')), fail. t2 :- t. t3 :- t3a(X),(!,fail;w('Fails to cut disjunction')). t3 :- t. t3a(!). t3a(X) :- w('Did not cut alternatives'), fail. t4 :- t3a(X), X, w('Ok going forwards'),fail. t4 :- t. t5 :- t5a(X), X, fail. t5 :- t. t5a((true,!)). t6 :- not(not(!)), fail. t6 :- t. ------------------------------------------------- From initial tests we have the following results: Implementation Test 1 2 3 4 5 6 DEC10 Compiler Y Y Y Y Y Y Waterloo, MUprolog Y Y Y Y Y N DEC10 int, CProlog Y Y Y N N N POPLOG Y Y Y I I I micro, sigma Y N N Y Y N where Y means did cut, N means did not cut and I means that it was trapped as an illegal use and failed. Note that in all cases 2=3 and 4=5; however in some implementations this may not be the case. If there are any other discriminating cases not covered above I would be glad to hear of them.