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