过渡问题未知原因

时间:2015-02-03 06:10:27

标签: prolog

我正在尝试使用接受“y | x *”

的状态创建NFA来描述它

这是我到目前为止所尝试的:

acpt(State, [A]).
acpt(State, []) :- acpt(State).
acpt(State, InputList) :- InputList = [A],
                             transition(State, X).

给出输入

acpt(q0, [x,y]).

我正在寻找它返回

true

给出时

acpt(q0, [x,x,y]).

它应该返回

false

我的代码产生了一些错误,我想知道我是否能得到一些帮助。 THX。

1 个答案:

答案 0 :(得分:1)

我评论了获得

所需的更正
1 ?- acpt(q0, [x,y]).
true 
.

2 ?- acpt(q0, [x,x,y]).
false.

工作代码:

% totally useless:
% acpt(State, [A|B]).

% typo: of course, we need acptng/1
% acpt(State, []) :- acpt(State).

acpt(State, []) :- acptng(State).
acpt(State, [A|B]) :-
    transition(State, X, A),
    acpt(X, B).

现在,除了测试输入工作之外,我必须说我看不到“ε”规则'实现。 IIRC,NFA应该允许在没有消费输入的情况下更改状态

修改

追踪

4 ?- leash(-all),trace,acpt(q0, [x,x,x]).
   Call: (7) so:acpt(q0, [x, x, x])
   Call: (8) so:transition(q0, _G1431, x)
   Exit: (8) so:transition(q0, q3, x)
   Call: (8) so:acpt(q3, [x, x])
   Call: (9) so:transition(q3, _G1431, x)
   Exit: (9) so:transition(q3, q3, x)
   Call: (9) so:acpt(q3, [x])
   Call: (10) so:transition(q3, _G1431, x)
   Exit: (10) so:transition(q3, q3, x)
   Call: (10) so:acpt(q3, [])
   Call: (11) so:acptng(q3)
   Exit: (11) so:acptng(q3)
   Exit: (10) so:acpt(q3, [])
   Exit: (9) so:acpt(q3, [x])
   Exit: (8) so:acpt(q3, [x, x])
   Exit: (7) so:acpt(q0, [x, x, x])
true 
.