From: Markus Triska Date: Sat, 3 Jul 2021 07:54:01 +0000 (+0200) Subject: ADDED: ... //0, describing an arbitrary number of elements X-Git-Tag: v0.9.0~51^2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=bf9654e1383c11be80746da5a4dc9e0fd37fed4b;p=scryer-prolog.git ADDED: ... //0, describing an arbitrary number of elements This is a very versatile nonterminal. For instance, repeated elements: ?- phrase((...,[E],...,[E],...), "hello!!"). %@ E = l %@ ; E = ! %@ ; false. --- diff --git a/src/lib/dcgs.pl b/src/lib/dcgs.pl index e1751d8c..f4cee25c 100644 --- a/src/lib/dcgs.pl +++ b/src/lib/dcgs.pl @@ -3,7 +3,9 @@ phrase/2, phrase/3, seq//1, - seqq//1]). + seqq//1, + ... //0 + ]). :- use_module(library(error)). :- use_module(library(lists), [append/3]). @@ -188,3 +190,6 @@ seq([E|Es]) --> [E], seq(Es). % Describes a sequence of sequences seqq([]) --> []. seqq([Es|Ess]) --> seq(Es), seqq(Ess). + +% Describes an arbitrary number of elements +... --> [] | [_], ... .