Этот предикат Пролога, я полагаю, предназначен для того, чтобы взять строку, которая выражается в виде списка, перевести ее на принимающий язык ФСМ. Это мой курс ИИ, который делает все на Прологе, языке, с которым я не слишком опытен:
str2fsm( [], [], [q0]).
str2fsm( [H|T], Trans, [Last]) :-
mTL( T, [H], [[q0, H, [H]]], Trans, Last).
/* mTL( +More, +LastSoFar, +TransSoFar, ?Trans, ?Last) */
mTL( [], L, Trans, Trans, L).
mTL( [H|T], L, TransSoFar, Trans, Last) :-
mTL( T, [H|L], [ [L,H,[H|L]] | TransSoFar], Trans, Last).
Как я уже сказал, я довольно новичок в Прологе и, несмотря на мои попытки выучить Как программировать с этим, я просто не привык к декларативному программированию, и понимание причин, лежащих в основе кода, для меня действительно сложно. Любая идея о том, как этот код работает шаг за шагом, будет принята с благодарностью (или даже более общий обзор того, как я должен думать о кодировании в Прологе). Спасибо!