我请你告诉我如何完成该程序
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).
答案 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).