From 47892bf24a8c4becb196f1b400fe40d5b50be9fa Mon Sep 17 00:00:00 2001 From: Markus Triska Date: Sun, 21 Aug 2022 14:29:32 +0200 Subject: [PATCH] ENHANCED: Improve determinism of ... //0 and seq//1. Example: ?- phrase(..., "hello"). true. This addresses #1577. --- src/lib/dcgs.pl | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/lib/dcgs.pl b/src/lib/dcgs.pl index 54160cf6..ae996cf0 100644 --- a/src/lib/dcgs.pl +++ b/src/lib/dcgs.pl @@ -132,16 +132,29 @@ user:term_expansion(Term0, Term) :- dcg_rule(Term0, Term). % Describes a sequence +seq(Xs) --> + call(det_end_(Xs)), + !. seq([]) --> []. seq([E|Es]) --> [E], seq(Es). +det_end_(Xs, Cs0,Cs) :- + var(Xs), + Cs0 == [], + Xs = [], + Cs0 = Cs. + % Describes a sequence of sequences seqq([]) --> []. seqq([Es|Ess]) --> seq(Es), seqq(Ess). % Describes an arbitrary number of elements +... --> call(det_end), !. ... --> [] | [_], ... . +det_end(Cs0,Cs) :- + Cs0 == [], + Cs0 = Cs. error_goal(error(E, must_be/2), error(E, must_be/2)). error_goal(error(E, (=..)/2), error(E, (=..)/2)). -- 2.54.0