% Some test data on which we shall test various procedures which contain cuts.
baz(1, 2).
baz(2, 3).
baz(3, 4).
bar(3).
bar(4).
eek(3, a).
eek(3, b).
eek(4, c).
% EXAMPLE 1 : Cut as final subgoal returns only one solution, although
% several would be possible if the cut were removed.
%
% | ?- foo(A, B).
%
% A=2
% B=3 ;
% no
foo(A, B):-
baz(A, B),
bar(B), !.
% EXAMPLE 2 : A third subgoal is added after the cut in the code from EXAMPLE 1
% We now get two solutions because eek/2 is not frozen by the cut.
%
% | ?- foo1(A, B, C).
%
% A=2
% B=3
% C=a ;
%
% A=2
% B=3
% C=b ;
% no
foo1(A, B, C):-
baz(A, B),
bar(B), !,
eek(B, C).
% EXAMPLE 3 : Produces the same results as EXAMPLE 2 but using foo/2 as
% a subgoal.
%
% | ?- foo2(A, B, C).
%
% A=2
% B=3
% C=a ;
%
% A=2
% B=3
% C=b ;
% no
foo2(A, B, C):-
foo(A, B),
eek(B, C).