假设我想在Haskell中添加两个列表。最常用的方法是什么?
这就是我的所作所为:
addLists :: (Integral a) => [a] -> [a] -> [a]
addLists xs ys = map add $ zip xs ys
where add (x, y) = x+y
答案 0 :(得分:29)
答案 1 :(得分:6)
Applicative Functor风格:
import Control.Applicative
addLists xs ys = getZipList $ (+) <$> ZipList xs <*> ZipList ys
请注意,这非常难看,因为有两种方法可以使List成为Applicative Functor。第一种(和恕我直言不太有用)的方式是采取所有组合,这种方式成为“标准”,因此(+) <$> [1,2] <*> [30,40]
是[31,41,32,42]
。另一种方法是在这里按需要压缩列表,但由于每种类型只能有一个类型类实例,我们必须将列表包装在ZipLists中,并使用getZipList解包结果。
答案 2 :(得分:2)
addLists xs ys = zipWith (+) xs ys