在我的代码中,zipWith7工作得很好,但是现在zipWith7中的函数需要额外的特性。
zipWith8 (\a b c d e f g h-> ....) List-A ... List-H而haskell基础库只支持多达7个版本。
有什么方法可以将函数扩展到N zipWithN?
发布于 2022-07-22 20:37:14
这是一个简单的方法(并不是说zipWith8和朋友是真正需要的!)是利用ZipList类型和Applicative运算符。
zipWith8 f a b c d e f g h = getZipList $
f <$> ZipList a
<*> ZipList b
<*> ZipList c
<*> ZipList d
<*> ZipList e
<*> ZipList f
<*> ZipList g
<*> ZipList h如果你愿意的话,我敢肯定你可以从中找到写zipWith9等的方法。
旁白:这是在学习Haskell与应用程序打交道的章节中提到的
除了
zipWith之外,标准库还有一些函数,比如zipWith3、zipWith4,一直到7。zipWith接受一个函数,它接受两个参数,并与它一起压缩两个列表。zipWith3接受一个函数,它接受三个参数,并在其中压缩三个列表,依此类推。通过使用具有应用程序样式的zip列表,我们不必为我们想要一起压缩的每个列表都有一个单独的zip函数。我们只是使用应用程序样式将任意数量的列表与函数压缩在一起,这非常酷。
发布于 2022-07-22 20:12:10
如果同时使用zip函数,则可以将前两个列表减少一个:
zipWithNplus1 f xs1 xs2 xs3 ... xsNplus1 =
zipWithN (uncurry f) (zip xs1 xs2) xs3 ... xsNplus1否则,启用ParallelListComp并编写一个并行列表,以理解任何一种特性:
[ f x1 ... xN
| x1 <- xs1
| x2 <- xs2
| x3 <- xs3
...
| xN <- xsN
]https://stackoverflow.com/questions/73085556
复制相似问题