Prolog中的有限状态自动机

时间:2018-05-08 16:37:09

标签: prolog state-machine

Prolog中描述有限自动机的程序。它需要有2个参数列表,第一个包含输入([a,b,a,b,a])例如另一个输出,它应该通过箭头之后的状态返回,例如[1,3,2,4,5]

enter image description here

1 个答案:

答案 0 :(得分:2)

假设您使用谓词f(StartState, EdgeLabel, EndState)编码有限状态自动机:

f(1,a,2).  f(1,b,1).
f(2,a,3).  f(2,b,4).
f(3,a,5).  f(3,b,2).
f(4,a,5).  f(4,b,1).
f(5,a,3).  f(5,b,1).

只需将查询链接到f/3,就可以解决此问题的固定操作序列:

?- X1=1, f(X1,a,X2), f(X2,b,X3), f(X3,a,X4), f(X4,b,X5), f(X5,a,X6), L=[X1,X2,X3,X4,X5,X6].
L = [1, 2, 4, 5, 1, 2] .

可以递归地为动作列表回答相同的查询。

基本步骤很简单:如果您从Start开始,并且不应用任何操作([]),则访问状态为[Start]

walk(Start, [], [Start]).

如果您有一系列操作和一系列访问状态,则Start我们应用操作Input,然后我们到达状态State,并以递归方式执行相同操作剩余的操作Inputs和剩余的状态States

walk(Start,[Input|Inputs],[Start|States]) :-
    f(Start,Input,State),
    walk(State, Inputs, States).

测试:

?- walk(1, [a,b,a,b,a], X).
X = [1, 2, 4, 5, 1, 2] ;
false.