Prolog-从事实中回归元素

时间:2015-06-11 22:03:35

标签: prolog return element fact

我遇到了事实问题。假设我有3个事实和check(X)问题。

fact(a,b).
fact(b,c).
fact(a,d).

check(X):-
//some calculation with fact()

如何使上述问题从所有事实中返回给定X的元素列表? 例如:check(a)会给出结果bd。所以我以后可以使用这个const。 check(b)将返回c。我很感激你的帮助!

1 个答案:

答案 0 :(得分:1)

列表需要额外的参数。所以你不能称之为check/1只有一个论点,但是 - 让我们说 - related_to/2

related_to(X, Ys) :-
   setof(Y, fact(X, Y), Ys).

示例查询:

?- related_to(a, Xs).
Xs = [b, d].

?- related_to(b, Xs).
Xs = [c].

?- related_to(d, Xs).
false.

?- related_to(X, Xs).
X = a,
Xs = [b, d] ;
X = b,
Xs = [c].

请注意,上述d之类的不存在节点的关系将失败。另一方面,您甚至可以要求最一般的目标立即获得所有可能的答案。

另请注意,此关系不是单调的:如果您添加更多事实,则先前获得的结果不再成立。就像添加fact(a,f)一样,目标related_to(a, [b,d])不再成立。相反,related_to(a,[b,d,f])现在成立。