リスト引数から追加のリストを構築するには、それを再帰的に訪問し、適切な場所に要素を格納します。このスニペットを完了できるかどうかを確認してください
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を数えて、それらをどこに配置するかを事前に決定する必要があります...