1

次のプログラム noMetagolR は次の場所にあります。

http://www.doc.ic.ac.uk/~shm/Papers/metagol_gram.pdf 33 ページ。

parse(S,G1,G2) :- parse(s(0),S,[],G1,G2).

parse(Q,X,X,G1,G2) :- abduce(acceptor(Q),G1,G2).
parse(Q,[C|X],Y,G1,G2) :- Skolem(P), abduce(delta1(Q,C,P),G1,G3), parse(P,X,Y,G3,G2).

abduce(X,G,G) :- member(X,G).
abduce(X,G,[X|G]) :- not(member(X,G)).

Skolem(s(0)). Skolem(s(1)). ...

クエリの例は次のとおりです。

parse([],[],G1), parse([0],G1,G2), parse([0,0],G2,G3), parse([1,1],G3,G4), parse([0,0,0],G4,G5), parse([0,1,1],G5,G6), parse([1,0,1],G6,G),not(parse([1],G,G)), not(parse([0,1],G,G)).

回答の置換は、パリティに対して学習した文法を返す必要があります。

プログラムは Yap で実行されると言われています。私は通常、SWI-prolog を使用します。いずれにせよ、彼らに理解してもらうにはどうすればよいSkolem/1でしょうか? おそらくこれはSkolem変数であることを意味しますか?たぶん使っていると思い=..ましたが、これはうまくいきません。

また、いくつのSkolem/1事実が必要ですか?

4

1 に答える 1

0

SWI-Prolog では、ソースにディレクティブを配置できます。

:- set_prolog_flag(allow_variable_name_as_functor,true).

current_prolog_flag /2を参照

REPL の例:

1 ?- set_prolog_flag(allow_variable_name_as_functor,true).
true.

2 ?- assert(X(1)).
true.

3 ?- X(Y).
Y = 1.
于 2015-08-12T18:12:12.810 に答える