Prolog-从事实返回元素
我在事实上遇到了问题。假设我有3个事实和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,
检查(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])相关的现在成立