Prolog-从事实返回元素

Prolog-从事实返回元素,prolog,return,element,fact,Prolog,Return,Element,Fact,我在事实上遇到了问题。假设我有3个事实和检查(X)问题 fact(a,b). fact(b,c). fact(a,d). check(X):- //some calculation with fact() 如何使上述问题从所有事实中返回给定X的元素列表? 例如:check(a)将给出结果b和d。所以我以后可以使用这个常量。 check(b)将返回c。我将非常感谢您的帮助 列表需要一个额外的参数。因此,您不能将其称为具有单个参数的check/1,但可以说,与/2相关 related_to(X,

我在事实上遇到了问题。假设我有3个事实和
检查(X)
问题

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

check(X):-
//some calculation with fact()
如何使上述问题从所有事实中返回给定
X
的元素列表? 例如:
check(a)
将给出结果
b
d
。所以我以后可以使用这个常量。
check(b)
将返回
c
。我将非常感谢您的帮助

列表需要一个额外的参数。因此,您不能将其称为具有单个参数的
check/1
,但可以说,
与/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
,关系将失败。另一方面,你甚至可以问最一般的目标,一次得到所有可能的答案

还要注意的是,这种关系不是单调的:如果你添加更多的事实,以前得到的结果将不再成立。就像通过添加事实(a,f)与(a,[b,d])相关的目标不再成立。相反,与(a[b,d,f])相关的
现在成立