Singleton Variable Prolog

时间:2014-03-28 20:32:02

标签: prolog

我想在Prolog中创建一个规则,在我的数据库中定义了daughter_of和son_of,如下所示。但是我在新规则中遇到单例错误,Y,M和F.我认为只有在其他地方没有使用变量时才会出现这种情况?这也是写新规则的正确方法吗?

非常感谢任何指导。

谢谢,

male(albert).
male(edward).

female(alice).
female(victoria).

parents(edward, victoria, albert).
parents(alice, victoria, albert).

sister_of(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).

brother_of(X,Y):-
male(X),
parents(X,M,F),
parents(Y,M,F).

daughter_of(X,Y):-
female(X),
parents(X,M,F).

son_of(X,_Y):-
male(X),
parents(X,M,F).

1 个答案:

答案 0 :(得分:1)

在你找到parents(X,M,F)的父母后,你忘了检查母亲或父亲是否为Y.

以下是更正后的代码:

daughter_of(X,Y):-
    female(X),
    parents(X,M,F),
    (Y = M ; Y = F).

son_of(X,Y):-
    male(X),
    parents(X,M,F),
    (Y = M ; Y = F).

试运行:

?- son_of(X, Y).
X = edward,
Y = victoria ;
X = edward,
Y = albert.

?- daughter_of(X, Y).
X = alice,
Y = victoria ;
X = alice,
Y = albert ;
false.