Следующий предикат более высокого порядка выполняется успешно, если все пары элементов списка истинны для данного отношения. Есть ли общее или лучшее, раскрывающее больше намерений название для этого отношения?
Моя первоначальная мотивация для этого имени заключалась в том, что в clpfd, часто существует ограничение all_different/1
, которое описывается как истинное, если и только если элементы попарно различны. На самом деле, я предпочел бы сказать, что все элементы разные, но меня часто поправляли (другие программисты на Прологе), чтобы я использовал попарно разные. На самом деле, это ограничение теперь наиболее естественным образом может быть выражено как 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, попарно - это неправильное слово, потому что оно может иметь смысл и для нерефлексивного Rel
.
Кроме того, отношение Rel
не является тотальным отношением, потому что call(Rel, X, X)
может потерпеть неудачу, но pairwise(Rel, Xs)
все же может быть успешным.
Я даже пытался найти (a->a->Bool)->[a]->Bool
. Но Hayoo нашел: имя pairwise
в отличие от точечного.
Посмотрел МО и математику:
i_pairwise
вместо определения метода вpairwise_level
? - person Willem Van Onsem   schedule 09.04.2014pairwise//2
? Возможное использование? - person repeat   schedule 10.10.2015