2016-09-23 15 views
0

おきのリストを連結。そして私はconcatお互いに3番目のリストにしたいと思います。同様に私はリストの大きなリストを持っている

let xss = [[1,2,3],[1,2,3],[1,2,3], 
      [4,5,6],[4,5,6],[4,5,6], 
      [7,8,9],[7,8,9],[7,8,9]] 

someFunk xss = [[1,2,3,1,2,3,1,2,3], 
       [4,5,6,4,5,6,4,5,6], 
       [7,8,9,7,8,9,7,8,9]] 

これを行う方法はありますか?

+1

確かにあります。何か試しましたか? –

+1

@ shree.pat18ええ。 'catThird(XS:XSS)= XS ++ 9(catThird XSS)を取る'しかし、それは最初の3つのリスト –

答えて

3

あなたはこのような何かを試みることができる:

someFunk :: [[a]] -> [[a]] 
someFunk (x:y:z:zs) = (x ++ y ++ z) : someFunk zs 
someFunk (x:y:ys) = (x ++ y) : someFunk ys 
someFunk (x:xs) = x : someFunk xs 
someFunk _ = [] 

パターンマッチングを使用して、あなたは、少なくとも3つのリストで、リストをチェックして参加し、再帰的にリストの残りの部分にそれを呼び出します。リストの数が3の倍数でない場合、後続のパターンでは、引き続き次の3つを連結することができます。

import Data.List.Split 
someFunk = map concat . chunksOf 3 

それは簡潔だし、私はそれはまた、あなたの英語の説明のようにたくさんの読み込みと思う:ちょうどbikesheddingの目的のために

Demo

+0

ニースに取り組んでいます。 didntのは、この '(:Y:Z:X ZS)のように、あなたはできるパターンマッチを知っている'が、私はそれを見たときに、今、それは理にかなっています! –

11

は、私はこのような何かを書くと思います。それはsplitパッケージを使用します。

関連する問題