introduce cuts over indexed (:)/2 of dcgs:phrase_/3 (#786)
This commit is contained in:
@@ -31,11 +31,12 @@ phrase(GRBody, S0, S) :-
|
|||||||
|
|
||||||
phrase_([], S, S).
|
phrase_([], S, S).
|
||||||
phrase_(!, S, S).
|
phrase_(!, S, S).
|
||||||
phrase_(_:[], S, S).
|
phrase_(_:[], S, S) :- !.
|
||||||
phrase_(_:!, S, S).
|
phrase_(_:!, S, S) :- !.
|
||||||
phrase_((A, B), S0, S) :-
|
phrase_((A, B), S0, S) :-
|
||||||
phrase(A, S0, S1), phrase(B, S1, S).
|
phrase(A, S0, S1), phrase(B, S1, S).
|
||||||
phrase_(M:(A, B), S0, S) :-
|
phrase_(M:(A, B), S0, S) :-
|
||||||
|
!,
|
||||||
phrase(M:A, S0, S1), phrase(M:B, S1, S).
|
phrase(M:A, S0, S1), phrase(M:B, S1, S).
|
||||||
phrase_((A -> B ; C), S0, S) :-
|
phrase_((A -> B ; C), S0, S) :-
|
||||||
!,
|
!,
|
||||||
@@ -52,26 +53,32 @@ phrase_(M:(A -> B ; C), S0, S) :-
|
|||||||
phrase_((A ; B), S0, S) :-
|
phrase_((A ; B), S0, S) :-
|
||||||
( phrase(A, S0, S) ; phrase(B, S0, S) ).
|
( phrase(A, S0, S) ; phrase(B, S0, S) ).
|
||||||
phrase_(M:(A ; B), S0, S) :-
|
phrase_(M:(A ; B), S0, S) :-
|
||||||
|
!,
|
||||||
( phrase(M:A, S0, S) ; phrase(M:B, S0, S) ).
|
( phrase(M:A, S0, S) ; phrase(M:B, S0, S) ).
|
||||||
phrase_((A | B), S0, S) :-
|
phrase_((A | B), S0, S) :-
|
||||||
( phrase(A, S0, S) ; phrase(B, S0, S) ).
|
( phrase(A, S0, S) ; phrase(B, S0, S) ).
|
||||||
phrase_(M:(A | B), S0, S) :-
|
phrase_(M:(A | B), S0, S) :-
|
||||||
|
!,
|
||||||
( phrase(M:A, S0, S) ; phrase(M:B, S0, S) ).
|
( phrase(M:A, S0, S) ; phrase(M:B, S0, S) ).
|
||||||
phrase_({G}, S0, S) :-
|
phrase_({G}, S0, S) :-
|
||||||
( call(G), S0 = S ).
|
( call(G), S0 = S ).
|
||||||
phrase_(M:{G}, S0, S) :-
|
phrase_(M:{G}, S0, S) :-
|
||||||
|
!,
|
||||||
( call(M:G), S0 = S ).
|
( call(M:G), S0 = S ).
|
||||||
phrase_(call(G), S0, S) :-
|
phrase_(call(G), S0, S) :-
|
||||||
call(G, S0, S).
|
call(G, S0, S).
|
||||||
phrase_(M:call(G), S0, S) :-
|
phrase_(M:call(G), S0, S) :-
|
||||||
|
!,
|
||||||
call(M:G, S0, S).
|
call(M:G, S0, S).
|
||||||
phrase_((A -> B), S0, S) :-
|
phrase_((A -> B), S0, S) :-
|
||||||
phrase((A -> B ; fail), S0, S).
|
phrase((A -> B ; fail), S0, S).
|
||||||
phrase_(M:(A -> B), S0, S) :-
|
phrase_(M:(A -> B), S0, S) :-
|
||||||
|
!,
|
||||||
phrase((M:A -> M:B ; fail), S0, S).
|
phrase((M:A -> M:B ; fail), S0, S).
|
||||||
phrase_(phrase(NonTerminal), S0, S) :-
|
phrase_(phrase(NonTerminal), S0, S) :-
|
||||||
phrase(NonTerminal, S0, S).
|
phrase(NonTerminal, S0, S).
|
||||||
phrase_(M:phrase(NonTerminal), S0, S) :-
|
phrase_(M:phrase(NonTerminal), S0, S) :-
|
||||||
|
!,
|
||||||
phrase(M:NonTerminal, S0, S).
|
phrase(M:NonTerminal, S0, S).
|
||||||
phrase_([T|Ts], S0, S) :-
|
phrase_([T|Ts], S0, S) :-
|
||||||
append([T|Ts], S, S0).
|
append([T|Ts], S, S0).
|
||||||
|
|||||||
Reference in New Issue
Block a user