1

Prolog リストについて理解するのに苦労しています。

これが私の問題です: リストと 2 つの変数を取り、奇数要素をリスト A に格納し、偶数要素をリスト B に格納する必要があります。

私はこれを手に入れましたが、探している結果が得られません

store(X, [], []).
store([X,Y|Z],[X|_],[Y|_]):-store(Z,X,Y).

結果は次のようになります。

where ?- store ([a,b,c,1,2,3], A, B).
         A = [b,1,3].
         B = [a,c,2].
4

1 に答える 1

1

リスト引数から追加のリストを構築するには、それを再帰的に訪問し、適切な場所に要素を格納します。このスニペットを完了できるかどうかを確認してください

odd_even([], [], []).
odd_even([N|Ns], [N|Odds], Evens) :-
   odd(N),
   !, odd_even(Ns, Odds, Evens).
% here another odd_even for evens

odd(N) :-
  ... % use rem/2 to find the integer remainder of N is 1

edit : リストの偶数の場所から要素を移動し、別のリストの奇数の場所に要素を移動するには (通常はsplitと呼ばれます)、visit はそれらを 2 つの追加の引数に配置するだけです: もう 1 つの終了規則が必要です。分割するリスト。

split([], [], []).
split([X], [], [X]).
split([X,Y|R], [X|Xs], [Y|Ys]) :-
   split(R,Xs,Ys).

考慮すべきケースがあります: 奇数対偶数をリストの最後から「カウント」する必要がある場合。次に、(最終的には)完了したらリストを交換する必要があります...これには、再帰的な訪問にさらに2つの引数を追加するか、num.of.elementsを数えて、それらをどこに配置するかを事前に決定する必要があります...

于 2012-05-12T07:04:47.953 に答える