Prolog で問題が発生しました。これが私が使用するコードの一部です。
has_same_elements([X|_],Y) :-
permutation(X,Xnew),
member(Xnew,Y), !.
has_same_elements([_|Tail],Y) :-
has_same_elements(Tail,Y).
これは、リストの 2 つのリストを入力として取得し、同じ要素を持つリストが含まれているかどうかを判断します。たとえば[[1,2],[3,4]]
、 と同じ要素があり[[2,1],[4,3]]
ます。これはうまくいきます。
今私のfindall:
findall(V, (verdeling2(S,Perm,V), \+X^(X\=V,verdeling2(S,Perm,X),has_same_elements(X,V))) ,Verd).
知っておくべき重要なことは、verdeling2/3 は (前述のように) リストの異なるリストを返す節であり、[1,2,3,4,...] の順列から構築されるということです。 verdeling2 のいくつかの異なる出力/3 (入力としての順列による) は次のとおりです。
V = [[[1, 2], [3, 4]]] ;
V = [[[2, 1], [3, 4]]] ;
V = [[[2, 3], [1, 4]]] ;
V = [[[2, 3], [4, 1]]] ;
V = [[[1, 3], [2, 4]]] ;
V = [[[3, 1], [2, 4]]] ;
V = [[[3, 2], [1, 4]]] ;
V = [[[3, 2], [4, 1]]] ;
V = [[[1, 3], [4, 2]]] ;
V = [[[3, 1], [4, 2]]] ;
V = [[[3, 4], [1, 2]]] ;
V = [[[3, 4], [2, 1]]] ;
V = [[[1, 2], [4, 3]]] ;
V = [[[2, 1], [4, 3]]] ;
V = [[[2, 4], [1, 3]]] ;
V = [[[2, 4], [3, 1]]] ;
V = [[[1, 4], [2, 3]]] ;
V = [[[4, 1], [2, 3]]] ;
V = [[[4, 2], [1, 3]]] ;
V = [[[4, 2], [3, 1]]] ;
V = [[[1, 4], [3, 2]]] ;
V = [[[4, 1], [3, 2]]] ;
V = [[[4, 3], [1, 2]]] ;
V = [[[4, 3], [2, 1]]] ;
ここで、同じ要素を含まないすべてのリストの概要を表示できるものが必要です (has_same_elements を使用)。findall を使用すればうまくいくはずだと思いましたが、不要なパケットをフィルタリングするのではなく、完全なパケットを返します。