【发布时间】:2013-05-16 23:27:43
【问题描述】:
我有一个学校项目,我必须与 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 个可接受的列表。
这应该是一个简单的问题,但我想不通。
谢谢!
【问题讨论】:
-
好吧,我试图在问题中解释它。不知道还要添加什么。谓词应该接收大约 3 个列表成员的属性,这意味着第一个将与其他两个成员中的一个相同。 (hifen 是下划线,这里不能写) predicate((einstein,-,-),(-,32,-),(-,45,-),List) 表示爱因斯坦要么是32要么是45例如,岁。
-
已编辑 :) 希望现在更清楚了。
-
很抱歉我没有看到这个问题。我搜索但没有注意到它。我相信它适用于我的问题。我会尽量充分利用它。谢谢!
-
没问题,这里很标准……
标签: prolog unification