2 つのリストの長さが同じで、最初と最後を除いてすべての要素が同じである場合、2 つのリストは同系です。長さの比較はできましたが、2つのリストの最初と最後を除いて要素が同じかどうかを確認する方法.
これが私のコードです:
sug([H|T],[H1|T1]) :-
length([H|T],N),
length([H1|T1],M),
N==M.
同系リストとは何かの例 -> sug([a,b,c,d],[d,b,c,a])
2 つのリストの長さが同じで、最初と最後を除いてすべての要素が同じである場合、2 つのリストは同系です。長さの比較はできましたが、2つのリストの最初と最後を除いて要素が同じかどうかを確認する方法.
これが私のコードです:
sug([H|T],[H1|T1]) :-
length([H|T],N),
length([H1|T1],M),
N==M.
同系リストとは何かの例 -> sug([a,b,c,d],[d,b,c,a])
いくつかのルールでそれを行うことができます:
上記のルールでは、要素数が異なる 2 つのリストが一致することはないため、長さを明示的にチェックする必要はありません。
上記のルールを Prolog でコーディングする方法は次のとおりです。基本的には、行単位で一致します。
sug([], []).
sug([_|T1], [_|T2]) :- sameExceptLast(T1, T2).
sameExceptLast([], []).
sameExceptLast([_], [_]).
sameExceptLast([X|T1], [X|T2]) :- sameExceptLast(T1, T2).
これはideoneのデモです。
なぜ、SWI-Prolog で:
sug(L1, L2) :-
append([[_], Ls, [_]], L1),
append([[_], Ls, [_]], L2).
リストに少なくとも 2 つの要素が必要であると仮定すると (対応する各リストで異なるように)、 を使用append/3
して中間リストを照合し、最初と最後の要素が異なることを確認できます。
sug([HL|LTail], [HR|RTail]):-
HL \= HR,
append(L, [LL], LTail),
append(L, [LR], RTail),
LL \= LR.
最初と最後の項目が異なる必要がない場合 (そうかもしれないし、そうでないかもしれません)、手順は次のようになります。
sug([_|LTail], [_|RTail]):-
append(L, [_], LTail),
append(L, [_], RTail).