我正在尝试学习 swi-prolog 的基础知识,我从一个简单的家谱开始。当我尝试编译代码时,它一直Syntax error: Operator expected
在第 47-53 行给我一个Singleton variables:[B, C]
警告,在第 60 和 61 行给出一个警告。如果熟悉该语言的人可以查看代码并告诉我我可能做错了什么,它会不胜感激。此外,如果有人可以推荐一个好的 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).