This is a very versatile nonterminal. For instance, repeated elements:
?- phrase((...,[E],...,[E],...), "hello!!").
%@ E = l
%@ ; E = !
%@ ; false.
phrase/2,
phrase/3,
seq//1,
- seqq//1]).
+ seqq//1,
+ ... //0
+ ]).
:- use_module(library(error)).
:- use_module(library(lists), [append/3]).
% Describes a sequence of sequences
seqq([]) --> [].
seqq([Es|Ess]) --> seq(Es), seqq(Ess).
+
+% Describes an arbitrary number of elements
+... --> [] | [_], ... .