我用我能想到的最好的方式来写标题,但让我说清楚。在 Prolog 中编写 DFA 时,这是一种典型的做法:
start(q0).
final(q2).
transition(q0, a, q1).
transition(q1, b, q1).
transition(q1, c, q2).
accept(Symbols) :- start(StartState), accept(Symbols, StartState).
accept([], State) :- final(State).
accept([Symbol|Symbols], State) :- transition(State, Symbol, NextState),
accept(Symbols, NextState).
我了解这段代码的作用,它的目标是什么,以及所有这些。令我难以置信的是“接受”规则。同样,我了解正在执行的操作背后的逻辑,但我不明白的是 StartState 和 NextState 的突然使用。这些都是凭空出现的,我不明白 start(StartState) 是如何开始返回 true 的,更不用说值的来源了。使用 NextState 也是如此。Prolog“认为”这些价值是什么?过渡事实如何接受它们?
如果我从事实开始:start(q0).,那么 start(StartState) 是怎样的。真的?