phrase(GB__2, Xs, [])
эквивалентно phrase(GB__2, Xs)
, но это не обязательно тот случай, когда первое решение phrase(GB__2, Xs0,Xs)
будет Xs == []
.
Вот минимальный пример:
:- set_prolog_flag(double_quotes, chars).
ao1 --> "a" | [].
ao2 --> [] | "a".
В то время как phrase(aoX, "a")
просто успешен для обоих, phrase(aoX, "a", Xs)
показывает разницу в последовательности найденных решений.
?- phrase(ao1, "a", Xs).
Xs = "a"
; Xs = [].
?- phrase(ao2, "a", Xs).
Xs = []
; Xs = "a".