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

标签 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).

最佳答案

您忘记引用空格和大写原子。这是执行此操作的代码片段:

?- 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/

相关文章:

prolog - 为什么 swi-prolog 中的 findall/3 忽略变量绑定(bind)?

prolog - 计算序言中 map 着色的数量

list - 序言;查找列表项

prolog - 如何从问题中打印变量值?

Prolog:在执行期间打印出变量的值

prolog - Prolog 中的公式化

macros - 在 SWI-Prolog 中编写宏

prolog - 查找列表中谓词的出现次数

prolog - 扁平化列表

list - 如何获得序言中给定数字的总和?