:- use_module(library(dcg/high_order)). [semidet]sequence(:Start, 
:Element, :Sep, :End, ?List)
[semidet]sequence(:Start, 
:Element, :Sep, :End, ?List)//Start, (Element, (Sep,Element)*)?, End
The example below matches a Prolog list of integers:
?- phrase(sequence(("[",blanks),
                   number, (",",blanks),
                   (blanks,"]"), L),
                   `[1, 2, 3 ] a`, Tail).
L = [1, 2, 3],
Tail = [32, 97].