2012-05-12 35 views
1

私はPrologリストの周りに頭を下げるのに苦労しています。ここで 与えられたリストから2つのリストを作る

は私の問題だ:私はリストと二つの変数に取ると、私はこれを得たが、そのが探して結果イムを与えていない

リストB.でリストAの奇数の要素とさえ要素を格納する必要があります

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]. 

答えて

1

は、適切な場合に要素を格納、それを再帰的な訪問を行うlist引数から追加リストを構築します。あなたはこのスニペットを完了することができます参照してください

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 

編集:(通常分割と呼ばれる)別で奇数場所、来院時にもリスト内の場所と要素から要素を移動するだけで2つの追加の引数に置きます:リストから2つの引数を分割すると考えられるので、もう1つの終了規則が必要です。

場合があります:奇数対リストの最後から 'カウント'する必要があります。 それから、リストが完了したら(最終的に)リストを交換する必要があります。再帰的な訪問に2つ以上の引数を追加するか、num.of.elementsを数えてあらかじめどこを決定するかを事前に決定する必要があります...

+0

I私の疑問をより明確にしているはずです。私は、リストAの位置1,3,5で要素を、リストBの位置2,4,6にある要素を望んでいました。 – STee

+0

ありがとう、私は2つ以上の要素を取り除く概念を把握するのに苦労しています。リストの頭。 – STee

+0

私は基本ケースと再帰ケースを理解できますが、コードの2番目の部分は分かりません。split([X]、[]、[X])。 – STee

関連する問題