transition(q0,s,q1). transition(q0,s,q2). transition(q0,X,peak) :- member(X,[p,t,k,b,d,g,m,n]). transition(q1,X,q8) :- member(X,[k,p]). transition(q1,X,peak) :- member(X,[p,t,k,m,n]). transition(q1,t,q9). transition(q2,k,q10). transition(q9,r,peak).
initial(q0). final(peak).
fsa(Node,[]) :- final(Node). fsa(Node,[First|Rest]) :- transition(Node,First,NextNode), fsa(NextNode,Rest).
%% Query generator
fsa_init :-
initial(Node),
fsa(Node,CharList),
list2string(CharList,String),
write(String),nl,fail.
list2string(CharList,String) :-
l2s(CharList,AsciiList),
name(String,AsciiList).
string2list(String,CharList) :-
name(String,AsciiList),
l2s(CharList,AsciiList).
l2s([],[]) :- !.
l2s([CharHead|CharRest],[AsciiHead|AsciiRest]) :-
name(CharHead,[AsciiHead]),
l2s(CharRest,AsciiRest).
%% Main caller programme:
:-
perform(fsa_init),
halt.
Output of query generator:
sp, st, sk, sm, sn, str, p, t, k, b, d, g, m, n.