Следующая программа 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)).
Подстановки ответов должны возвращать изученную грамматику для четности.
Говорят, что программа работает на Япе. Я обычно использую SWI-prolog. В любом случае, что мне сделать, чтобы они поняли Skolem/1
? Предположительно это означает, что Skolem
является переменной? Я думал, может быть, использовать =..
, но это не работает.
Также сколько Skolem/1
фактов необходимо?
Skolem(X)
может означать две разные вещи: либо она означает'Skolem'(X)
, либо означаетcall(Skolem,X)
. Так что это может увеличить путаницу, если вы продолжите использовать этот синтаксис. Вместо этого напишитеskolem(X)
. - person false   schedule 15.08.2015Skolem/1
, поэтому не понял, что они делают. - person user27815   schedule 15.08.2015