10

Haskell で 2 つのリストを追加したいとします。これを行う最も一般的な方法は何ですか?

これが私がしたことです:

addLists :: (Integral a) => [a] -> [a] -> [a]
addLists xs ys = map add $ zip xs ys
    where add (x, y) = x+y
4

3 に答える 3

29

zipWith提供された関数を使用して 2 つのリストを結合するライブラリ関数があります。ここで必要なことを正確に実行し、次のようになります。

addLists = zipWith (+)

これは(+)、追加の引数として指定されたリストの要素を結合するために使用します。

于 2011-01-23T21:49:21.650 に答える
6

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 を使用して結果をアンラップする必要があります。

于 2011-01-24T07:40:17.633 に答える
2
addLists xs ys = zipWith (+) xs ys
于 2011-01-23T21:49:19.967 に答える