call(Goal, Dict1, V0, V1), call(Goal, Dict2, V1, V2), ... call(Goal, Dictn, Vn, V).
This predicate is used to implement re_split/4 and re_replace/4. For example, we can count all matches of a Regex on String using this code:
re_match_count(Regex, String, Count) :-
re_foldl(increment, Regex, String, 0, Count, []).
increment(_Match, V0, V1) :-
V1 is V0+1.
After which we can query
?- re_match_count("a", "aap", X).
X = 2.