基本的に、(0th、2nd、4th など)から偶数のインデックス付き要素のみを含む、生成された新しいリストeven_elts(L,M)
である述語を記述する必要があります。L
M
add_tail([X],[],X).
add_tail([H|NewT],[H|T],X) :-
add_tail(NewT,T,X).
even_elts(L,[]) :- L = [].
even_elts(L,M) :- even_elts2(L,M,1).
even_elts2(L,[H2|T2],Ct) :-
Ct2 is Ct + 1,
((Ct2 mod 2) =:= 0, add_tail(L,L2,H2), even_elts2(L2,T2,Ct2); even_elts2(L,T2,Ct2)).
even_elts2(_,[],_) :- !.
これは、M
が空であるか、1 つまたは 2 つの要素が含まれている場合に機能します。ただし、M
残りではなく、最初の偶数インデックス要素のみを取得します。ポインタ
編集:新しいリストを作成してデータをコピーするのではなく、奇数のインデックス付き要素を削除することにより、問題を別の方法で解決しました。しかし、誰かが私の元のコードの解決策を見つけられるなら、私は興味があります.