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.
This commit is contained in:
Markus Triska
2021-07-03 09:54:01 +02:00
parent 4decd1d784
commit bf9654e138

View File

@@ -3,7 +3,9 @@
phrase/2, phrase/2,
phrase/3, phrase/3,
seq//1, seq//1,
seqq//1]). seqq//1,
... //0
]).
:- use_module(library(error)). :- use_module(library(error)).
:- use_module(library(lists), [append/3]). :- use_module(library(lists), [append/3]).
@@ -188,3 +190,6 @@ seq([E|Es]) --> [E], seq(Es).
% Describes a sequence of sequences % Describes a sequence of sequences
seqq([]) --> []. seqq([]) --> [].
seqq([Es|Ess]) --> seq(Es), seqq(Ess). seqq([Es|Ess]) --> seq(Es), seqq(Ess).
% Describes an arbitrary number of elements
... --> [] | [_], ... .