11

次の高次述語は、リストの要素のすべてのペアが特定の関係に対して true である場合に成功します。この関係に共通の、またはより良い、より意図を明らかにする名前はありますか?

この名前を付けた当初の動機は、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 が観察したように、ペアワイズは適切な言葉ではありませRelん。

また、失敗する可能性がありますが、それでも成功する可能性がRelあるため、関係は完全な関係ではありません。call(Rel, X, X)pairwise(Rel, Xs)

私も大騒ぎしました(a->a->Bool)->[a]->Bool。しかし、Hayooはそれを見つけましたpairwise

MOと数学を見た:

4

2 に答える 2

6

私はあなたの質問がとても好きです。ウィキペディアを調べて、適切な用語を見つけようとしました。私は、リストをセットとして考えています。各メンバーは別個の微分可能な要素であるため、同じ原子のインスタンスが 2 つあったとしても、それらの位置などによって異なる要素になります。あなたが説明した述語は、[connex] 二項関係 ( https://en.wikipedia.org/wiki/Total_relation )になると思います。

X 上の二項関係 R は、a ≠ b であるような X のすべての a と b について、a が b に関連しているか、b が a (またはその両方) に関連している場合、connex と呼ばれます。

一方、関係が再帰的であることも意図している場合、それは完全な二項関係を記述します (connex と同じページで説明されています)。

しかし、あなたの述語pairwise/2は実際にはあなたが与えた説明に適合していないと思います。または(おそらく)私はよく理解していません.

「リストの要素のすべてのペアが特定の関係に対して真である場合」、述語は成功するはずだとあなたは言います。しかしpairwise(>, [1,2,3])、偽であるpairwise(<, [1,2,3])のに真であり、一方pairwise(>, [3,2,1])で真であるpairwise(<, [3,2,1])が偽です。しかし、これらのリストの要素の各ペアのうち、一方他方よりも大きいです。


編集:

以下は私の誤解の結果であり、質問とは関係がないことが判明しました。

@false が記述しているもののより正確な定義である可能性があると考えて、次の定義を提案しましたが、彼は、私が思っていた関係を定義していないことを指摘しました。コメントでのその後の交換をわかりやすくするために、私はそれを保持しました。

逆にリストをチェックする別の句を追加すると、この問題は解決しますが、逆にキャッチできない他の関係があるのでしょうか? また、本物の接続チェックを実装するより効率的な方法はありますか?

connex_over(Rel, Xs) :-
   i_connex_over(Xs, Rel), !.
connex_over(Rel, Xs) :-
   reverse(Xs, Sx),
   i_connex_over(Sx, Rel).

i_connex_over([], _).
i_connex_over([X|Xs], Rel) :-
   maplist(call(Rel,X),Xs),
   i_connex_over(Xs, Rel).

@false が前のエラーを指摘した後、次の定義を書きました。私はそれが S の要素上の結合を記述していると信じています:

actual_connex_over(Rel, S) :-
   foreach( ( select(X, S, T), member(Y, T) ),
            ( call(Rel, X, Y) ; call(Rel, Y, X) )
          ).
于 2014-04-09T12:59:34.160 に答える