0

PROLOG の割り当てに問題があります。

つまり、単語が言語に属している場合は true (オートマトンは Goto テーブル、アクション テーブル、文法で表されますが、それほど重要ではありません)、そうでない場合は false を返す述語 accept(+Automaton, +Word) を作成する必要があります (必要です)。 true または 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を見つけましたが、ここで問題が発生する可能性があることがわかりました。

しかし、ここに true または false を返すための解決策がありますか (たとえば、 member('mistake', RightmostDeriv) のようなメンバー述語を使用)。

編集:持っている

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]  ?- 
4

0 に答える 0