【发布时间】:2016-08-30 19:23:18
【问题描述】:
我被要求在 prolog 中代表 FSA。
- fsa 是状态列表。
- 状态是具有函子状态和 3 个参数的结构:名称、列表 转换,是或否表示状态是接受还是 不是。
- 转换是具有函子转换和 2 个参数的结构:从、 一个字符,一个州名。
我们的 FSA 没有 epsilon 移动。
nondfsa(FSA) 如果 FSA 是不确定的,则为真。完成 nondfsa。提示:使用
辅助谓词nondstate(State),如果 State 具有非确定性,则为 true
过渡。您可以为谓词添加子句。`
我得到的答案如下:
nondfsa([Hstate | _ ])
:- nondstate(Hstate).
nondfsa([ _ | Tailstates]) :-
nondfsa(Tailstates).
nondstate(state( _ , Transitions, _ )):-
member(transition(Char, To1), Transitions),
member(transition(Char, To2), Transitions),
not(To1 = To2).
谁能帮我解释一下每个谓词在做什么?我对这些行的确切含义感到非常困惑。
我了解如果至少一个状态具有多个具有相同字符的转换,则没有 epsilon 移动的 fsa 是不确定的。 我只是不明白这段代码发生了什么。
【问题讨论】:
-
我得到了答案是什么意思?想出这个答案是你的任务,还是他们在课堂上提供的,你应该分析它?
-
@lurker 用于练习期末考试,任务是提供代码并检查您的工作,他们会为您提供正确的答案。我只是不太明白他们是怎么想出来的,以及它到底在做什么