如果列表元素的所有对对于给定关系都为真,则以下高阶谓词成功。这种关系有一个共同的或更好的、更能揭示意图的名称吗?
我取这个名字的最初动机是,在clpfd中,通常存在一个all_different/1
被描述为真实的约束,如果元素是成对不同的。事实上,宁愿说元素都是不同的,但我经常被纠正(由 Prolog 程序员同行)使用成对不同。事实上,这个约束现在可以最自然地表示为pairwise(#\=, Zs)
。
pairwise(Rel_2, Xs) :-
i_pairwise(Xs, Rel_2).
i_pairwise([], _).
i_pairwise([X|Xs], Rel_2) :-
maplist(call(Rel_2,X),Xs),
i_pairwise(Xs, Rel_2).
正如@aBathologist 观察到的,pairwise 不是正确的词,因为它也可能对非反身有意义Rel
。
此外,关系Rel
不是完全关系,因为call(Rel, X, X)
可能会失败,但pairwise(Rel, Xs)
仍然可能成功。
我什至为(a->a->Bool)->[a]->Bool
. 但是 Hayoo发现了它:namepairwise
与 pointwise 不同。
看了MO和数学: