2017-03-27 6 views
0

3つのリストにリストを分割し、各リストに要素を順番に書き込むリレーションが必要です。SWI-Prolog特別な条件で3に分割する

[1,2,3,4,5,6,7,8,9] -> [[1,4,7],[2,5,8],[3,6,9]] 
+0

何を試しましたか?宿題の割り当てのように聞こえる。あなたの先生があなたに提供した読書資料を勉強することをお勧めします。 – wvdz

+3

@gnat:この質問では不明な点は何ですか? – false

答えて

3
split_3([], [[],[],[]]). 
split_3([A], [[A],[],[]]). 
split_3([A,B], [[A], [B], []]). 
split_3([A,B,C|T], [[A|T1],[B|T2],[C|T3]]) :- 
    split_3(T, [T1,T2,T3]). 

これは、リスト内の要素の数は3の倍数でない場合には、このように動作します:

?- split_3([1,2,3,4,5,6,7,8,9,10],L). 
L = [[1, 4, 7, 10], [2, 5, 8], [3, 6, 9]] 

?- split_3([1,2,3,4,5,6,7,8,9,10,11],L). 
L = [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9] 
3

ちょうど3つの要素のリストを要求することはむしろまれです。その場合、おそらく構造がより適切でしょう。あるいは議論だけでよい。しかしとにかく:

split_3l(Xs, [As, Bs, Cs]) :- 
    split_3(Xs, As, Bs, Cs). 

split_3([], [], [], []). 
split_3([X|Xs], [X|As], Bs, Cs) :- 
    split_3(Xs, Bs, Cs, As). 
+2

どのように巧みに彼らは回転しますが、まだそれらの場所を維持! –

関連する問題