Suppose I call an "a-list" a list of zero or more "a"s:
% as = [a,a,a]
as --> [].
as --> [a], as.
Suppose I want to represent a "b-list”, a list of zero or more a-lists:
% bs := [ as, as ]
% bs = [ [a,a,a], [a] ]
bs --> [].
bs --> [A], { phrase(as,A) }, bs.
Is there some more idiomatic way of saying this which doesn't require use of the curly braces to drop out of DCG into "normal Prolog", only to call phrase() again?