metagol 中谓词的变量
Variables for predicates in metagol
以下程序 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)).
答案替换应该return 学过的奇偶校验语法。
这个程序在 Yap 据说是 运行。我通常使用 SWI-prolog。无论哪种方式,
我该怎么做才能让他们理解 Skolem/1
?大概这意味着 Skolem
是一个变量?我想也许可以使用 =..
但这不起作用。
还需要多少Skolem/1
个事实?
在 SWI-Prolog 中,您可以在源代码中放置指令
:- set_prolog_flag(allow_variable_name_as_functor,true).
REPL 示例:
1 ?- set_prolog_flag(allow_variable_name_as_functor,true).
true.
2 ?- assert(X(1)).
true.
3 ?- X(Y).
Y = 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)).
答案替换应该return 学过的奇偶校验语法。
这个程序在 Yap 据说是 运行。我通常使用 SWI-prolog。无论哪种方式,
我该怎么做才能让他们理解 Skolem/1
?大概这意味着 Skolem
是一个变量?我想也许可以使用 =..
但这不起作用。
还需要多少Skolem/1
个事实?
在 SWI-Prolog 中,您可以在源代码中放置指令
:- set_prolog_flag(allow_variable_name_as_functor,true).
REPL 示例:
1 ?- set_prolog_flag(allow_variable_name_as_functor,true).
true.
2 ?- assert(X(1)).
true.
3 ?- X(Y).
Y = 1.