我的PROLOG任务有问题。
即,我必须编写谓词接受(+自动机,+ Word),如果Word属于语言,则返回true(自动机由Goto表,Action表和语法表示,但它不是那么重要),否则为false(在我的任务中要求返回真或假)。我写了
accept(Automaton, Word) :-
parse(Automaton, Word, RightmostDeriv),
nl, print_list(RightmostDeriv), nl.
,其中
谓词parse(+Automaton, +Word, -RightmostDeriv)
计算最大推导。如果无法解析Word,则RighmostDeriv == ['mistake']
如你所见,我可以打印最严格的推导,但我不知道如何返回false或true。
我找到了这个https://csc.cdf.toronto.edu/mybb/showthread.php?tid=2100,我发现这可能是一个问题。
但也许在这里有任何解决方案(例如成员谓词,类似成员('错误',RightmostDeriv))返回true或false?
编辑:有
accept(Automaton, Word) :-
parse(Automaton, Word, RightmostDeriv),
nl, print(RightmostDeriv), nl.
我收到了(测试2 - 来自维基百科的例子http://en.wikipedia.org/wiki/LR_parser#Additional_Example_1.2B1)
[4] ?- make.
=============== Test 1 ===================
[mistake]
=============== Test 2 ===================
[5,3,5,2]
true .
[4] ?-
并且:
accept(Automaton, Word) :-
parse(Automaton, Word, RightmostDeriv),
RightmostDeriv \= ['mistake'].
我收到了(无限循环)
?- make.
=============== Test 1 ===================
^CAction (h for help) ? break
% Break level 1
[1] ?-