почему вы думаете, что это не получится? Последовательность решения:
delta(1, b, 2)
delta(2, a, 3)
delta(2, a, 2)
delta(2, a, 3)
Моя личная "лучшая практика" - собрать доказательства
accept([X|[]], Q,[delta(Q, X, Q1)]) :-
alphabet(X),
delta(Q, X, Q1),
print(delta(Q, X, Q1)),nl,
final_state(Q1).
accept([X|XS], Q,[delta(Q, X, Q1)|Rest]) :-
alphabet(X),
delta(Q, X, Q1),
print(delta(Q,X,Q1)),nl,
accept(XS, Q1,Rest).
accept(String,State):-accept(String,State,_).
. Это показывает, что программа может быть проверена с помощью приведенной выше последовательности
?- accept([b,a,b,a],1, Proof).
Proof = [delta(1, b, 2), delta(2, a, 3), delta(3, b, 2), delta(2, a, 3)]