我的 Prolog 程序中有一条规则,blanket(X,Y)
它检查 X 是否在某种 Y 集合中,其中包括:
- Y的父母
- Y的孩子们
- Y的共同父母
我将其定义如下:
blanket(Y,X) :- different(Y,X),parent(Y,X);child(Y,X);coparent(Y,X).
但是,这并不像我预期的那样工作。它正确地识别了 X 的父母、孩子和共同父母(如果有的话),但它将自己列为父母和共同父母,这是我不想要的。是否可以设置某种顺序,以便different(Y,X)
首先独立评估?当然,我尝试了类似 :different(Y,X),(parent(Y,X);child(Y,X);coparent(Y,X)).
的方法,但这会产生语法错误,因为我仍然对这种语言非常不熟悉。
任何建议将不胜感激。
编辑:这里是child
,different
和coparent
关系:
child(X,Y) :- parent(Y,X).
different(X,Y) :- not(X == Y).
coparent(Y,X) :- parent(Y,Z),parent(X,Z).
为了完整性。