2017-03-27 110 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

你有什麼試過?聽起來像一個家庭作業tbh。我建議學習你的老師給你提供的閱讀材料。 – 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

這是相當不尋常的要求恰好三個元素的列表。在這種情況下,結構最可能更合適;或者僅僅是參數。但無論如何:

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

他們如何巧妙地旋轉,但仍然保持他們的地方! –