2016-08-25 15 views
0

私は計算を実行するための時間で2つの要素を抽出したいリスト let a = [1,2,3,4]ハスケル:リストの印刷要素

を持っています。誰が私にこれを達成する方法を教えてもらえますか?私はハスケルには新しいです。

私はtake 2 aを知っています。しかし、どのようにしてこれをループに入れて、一度に2つの要素が抽出されるようにすることができます。私は混乱しています。

+4

[ 'splitAt'](https://hackage.haskell.org/package/base-4.9.0.0/docs/Prelude.html#v:splitAt)関数または[' chunksOfを見てください'](https://hackage.haskell.org/package/split-0.2.3.1/docs/Data-List-Split.html#v:chunksOf) – ErikR

+0

ありがとうございます。しかし、次にタプルをループして実行する必要があります計算?? –

+1

再帰あり。 –

答えて

4

はあなたが興味のある要素に独自の再帰関数とパターンマッチングを書き込むことができます。

f (a:b:list) = doSomeThingWith a b : f list 

が正しく[][a]例に一致することを確認します。

5

例を示します。あなたはmap機能に精通している(またはになる必要があります):

ここ
map :: (a -> b) -> [a] -> [b] 
map f [] = [] 
map f (x:xs) = f x : map f xs 

、あなたはの引数をとる関数を持って、そして時にリストから二つの要素に適用することができます。 mapのように動作するが、引数が2つの関数を持つ関数mapTwoがあります。簡単にするため、リストには偶数の要素があると仮定します。

mapTwo :: (a -> a -> b) -> [a] -> [b] 
mapTwo f [] = [] 
mapTwo f (x1:x2:xs) = f x1 x2 : mapTwo f xs 
+1

'mapTwo [x] = error"の大文字小文字にするべきではありません "シングルトンリストは許されません"? – epsilonhalbe

+2

私の最後の文章を見てください。私はちょうど奇数の値を持つリストをどのように扱うかを考えたくありませんでした。 – chepner

+1

むしろ、私は 'Maybe'や' Either'を使って、エラーを起こしたり、例外モナドを使ったりして、部分的な機能の長所と短所を出したくありませんでした。 – chepner

関連する問題