我有一个学校项目,我必须与 Prolog 一起工作。这对我来说都是新的,所以我遇到了一些问题。
我有一个这样的列表:
List = [(_,_,_),(_,_,_),(_,_,_)]
我应该通过我必须创建的几个谓词从每个成员的输入信息中接收。
其中之一是以下类型:
predicate(M1,M2,M3, List)
它说 M1 是 M2 或 M3,但不是两者兼而有之。例如,
predicate((_,a,_),(2,_,_),(3,_,_),List)
表示带有“a”的成员在第一个字段中有 2 或 3。
我整晚都在尝试,但无法提出解决方案。我相信我必须使用统一,但不知道该怎么做。
我试过这个:
predicate(M1,M2,M3,[_]) :- (M1=M2), not(M1=M3).
predicate(M1,M2,M3,[_]) :- (M1=M3), not(M1=M2).
这可能看起来很荒谬,但正如我所说,Prolog 对我来说是全新的,我不能完全掌握它的功能。
任何提示表示赞赏。谢谢!
编辑:
例子:
person(name,age,job).
List = [(einstein,_,_),_,_].
所以现在我有一个 3 人的列表,爱因斯坦排在第一位。
predicate = ((einstein,_,_),(_,87,_),(_,23,_), List).
List = [(einstein,87,_),_,_)];
List = [(einstein,23,_),_,_)].
以上是应用谓词后的 2 个可接受的列表。
这应该是一个简单的问题,但我无法弄清楚。
谢谢!