Tag: transitive closure

自反传递闭包的定义

许多谓词本质上使用某种形式的传递闭包,只是发现终止也必须被解决。 为什么不用closure0/3解决这个问题closure0/3 : :- meta_predicate closure0(2,?,?). :- meta_predicate closure(2,?,?). :- meta_predicate closure0(2,?,?,+). % internal closure0(R_2, X0,X) :- closure0(R_2, X0,X, [X0]). closure(R_2, X0,X) :- call(R_2, X0,X1), closure0(R_2, X1,X, [X1,X0]). closure0(_R_2, X,X, _). closure0(R_2, X0,X, Xs) :- call(R_2, X0,X1), non_member(X1, Xs), closure0(R_2, X1,X, [X1|Xs]). non_member(_E, []). non_member(E, [X|Xs]) :- dif(E,X), non_member(E, Xs). 有没有这个定义不能用于实现传递闭包的情况? 为什么dif / 2? 要详细回答@ […]