Eri*_*son 10 haskell nested-lists
假设我想在Haskell中添加两个列表.最常用的方法是什么?
这是我做的:
addLists :: (Integral a) => [a] -> [a] -> [a]
addLists xs ys = map add $ zip xs ys
where add (x, y) = x+y
Run Code Online (Sandbox Code Playgroud)
sth*_*sth 29
有一个zipWith库函数,它通过使用提供的函数组合两个列表.它完全符合你的要求,你得到:
addLists = zipWith (+)
Run Code Online (Sandbox Code Playgroud)
这用于(+)组合作为进一步参数给出的列表元素.
适用的Functor风格:
import Control.Applicative
addLists xs ys = getZipList $ (+) <$> ZipList xs <*> ZipList ys
Run Code Online (Sandbox Code Playgroud)
请注意,这是如此丑陋,因为有两种方法可以使List成为Applicative Functor.第一个(恕我直言不太有用)的方式是采取一切结合,这种方式成为"标准",所以(+) <$> [1,2] <*> [30,40]是[31,41,32,42].另一种方法是在这里按需要压缩列表,但由于每种类型只能有一个类型类实例,我们必须将列表包装在ZipLists中,并使用getZipList解包结果.