Haskell で 2 つのリストを追加したいとします。これを行う最も一般的な方法は何ですか?
これが私がしたことです:
addLists :: (Integral a) => [a] -> [a] -> [a]
addLists xs ys = map add $ zip xs ys
where add (x, y) = x+y
Haskell で 2 つのリストを追加したいとします。これを行う最も一般的な方法は何ですか?
これが私がしたことです:
addLists :: (Integral a) => [a] -> [a] -> [a]
addLists xs ys = map add $ zip xs ys
where add (x, y) = x+y
zipWith
提供された関数を使用して 2 つのリストを結合するライブラリ関数があります。ここで必要なことを正確に実行し、次のようになります。
addLists = zipWith (+)
これは(+)
、追加の引数として指定されたリストの要素を結合するために使用します。
Applicative Functor スタイル:
import Control.Applicative
addLists xs ys = getZipList $ (+) <$> ZipList xs <*> ZipList ys
List を Applicative Functor にするには 2 つの方法があるため、これは非常に見苦しいことに注意してください。最初の(そして私見ではあまり役に立たない)方法は、すべての組み合わせを取ることであり、その方法が「標準」になりまし(+) <$> [1,2] <*> [30,40]
た[31,41,32,42]
。もう 1 つの方法は、必要に応じてリストを圧縮することですが、型ごとに 1 つの型クラス インスタンスしか持てないため、ZipLists でリストをラップし、getZipList を使用して結果をアンラップする必要があります。
addLists xs ys = zipWith (+) xs ys