我请求您让我知道如何完成该计划
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).
最佳答案
您忘记引用空格和大写原子。这是执行此操作的代码片段:
?- 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).
关于prolog - 如何使用 Prolog 实现 [a-z][.?!][ ]+[A-Z] 自动机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22633014/