如何使用Prolog实现[a-z] [。?!] [] + [A-Z]的自动机?

时间:2014-03-25 11:20:03

标签: prolog

我请你告诉我如何完成该程序

start(q0).
final(q4).

transition(q0,[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z],q1).
transition(q1,[.,?,!],q2).
transition(q2,[ ],q3).
transition(q3,[ ],q3).
transition(q3,[A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z],q4).

1 个答案:

答案 0 :(得分:2)

你忘了引用空格和大写原子。这是一个片段:

?- transition(q0,L,_),maplist(upcase_atom,L,U),writeq(U).

现在,在过渡修正后(q3,...),你的问题应该回答:

accept(Atom) :-
    atom_chars(Atom, Chars),
    start(S), accept(Chars, S).

accept([], F) :- final(F).
accept([C|Cs], State) :-
    transition(State, Ts, NextState),
    memberchk(C, Ts),
    accept(Cs, NextState).