我正在嘗試學習swi-prolog的基礎知識,並以一棵簡單的家族樹開始。當我嘗試編譯代碼時,它會一直給我一個在第47-53行的Syntax error: Operator expected
和第60和61行的一個Singleton variables:[B, C]
警告。如果熟悉該語言的人可以查看代碼並告訴我我可能做錯了什麼這將非常感激。另外,如果任何人都可以推薦一個好的swi-prolog編譯器,那將是非常感謝。swi-prolog家族樹中的錯誤
下面的代碼
%
%Lineage
%
parent_child(stan, lisa).
parent_child(stan, steve).
parent_child(gertrude, steve).
parent_child(steve, adam).
parent_child(steve, brian).
parent_child(steve, jessie).
parent_child(ann, jessie).
parent_child(lisa, dave).
parent_child(allice, adam).
parent_child(ann, brian).
%
%Gender
%
male(adam).
male(brian).
male(dave).
male(kyle).
male(steve).
male(stan).
female(allice).
female(ann).
female(jessie).
female(gertrude).
female(lisa).
%
%Relation Clauses
%
father(X, Y) :- parent_child(X, Y), male(X).
mother(X, Y) :- parent_child(X, Y), feamle(X).
grandfather(X, Z) :- parent_child(X, Y), parent_child(Y, Z), male(X).
grandmother(X, Z) :- parent_child(X, Y), parent_child(Y, Z), female(X).
brother(X, Y) :- parent_child(A, X), parent_child(B, X), parent_child(A, Y),
parent_child(B, Y), female(A), male(B), male(Y).
brothers(X, Y) :- parent_child(A, X), parent_child(B, X), parent_child(A, Y),
parent_child(B, Y), female(A), male(B), male(X), male(y).
sister(X, Y) :- parent_child(A, X), parent_child(B, X), parent_child(A, Y),
parent_child(B, Y), female(A), male(B), female(Y).
sisters(X, Y) :- parent_child(A, X), parent_child(B, X), parent_child(A, Y),
parent_child(B, Y), female(A), male(B), female(X), female(Y).
aunt(X, Y) :- parent_child(A, X), parent_child(B, Y), Parent(A, B).
aunt_nephew(X, Y) :- parent_child(A, X), parent_child(B, Y), Parent(A, B),
female(X), male(Y).
aunt_niece(X, Y) :- parent_child(A, X), parent_child(B, Y), Parent(A, B),
female(X), female(Y).
uncle(X, Y) :- parent_child(A, X), parent_child(B, Y), Parent(A, B).
uncle_nephew(X, Y) :- parent_child(A, X), parent_child(B, Y), Parent(A, B),
male(X), male(Y).
uncle_niece(X, Y) :- parent_child(A, X), parent_child(B, Y), Parent(A, B),
male(X), female(Y).
cousin(X, Y) :- parent_child(A, X), parent_child(C, A), parent_child(B, Y),
parent_child(C, B).
cousin_male(X, Y) :- parent_child(A, X), parent_child(C, A),
parent_child(B, Y), parent_child(C, B), male(Y).
cousin_female(X, Y) :- parent_child(A, X), parent_child(C, A),
parent_child(B, Y), parent_child(C, B), female(Y).
half_brother(X, Y) :- parent_child(A, X), parent_child(A, Y),
parent_child(B, X), parent_child(C, Y), male(X).
half_sister(X, Y) :- parent_child(A, X), parent_child(A, Y),
parent_child(B, X), parent_child(C, Y), female(X).
[SWI序言(http://www.swi-prolog.org/)是優秀的。 – 2013-04-24 20:41:41
兄弟/ 2和姐妹/ 2是不尋常的。在Prolog中多元化的處理方式是不同的(參見[findall](http://www.swi-prolog.org/pldoc/doc_for?object=findall/3)/ 3) – CapelliC 2013-04-24 21:26:31
@CapelliC OP可能是爲姐妹X,Y)「表示」Y「是」X「的姐妹,而」姐妹(X,Y)「則表示他們都是彼此的姐妹。所以它不是關於複數,它只是一種關係。 – 2013-04-24 22:14:20