将函数映射到Haskell 2元素中的列表一次

byr*_*sos 2 haskell

我在Haskell 尝试了一些问题(在Spoj),我偶然发现了一些有输入形式的问题:

testcase_1
testcase_1_continued
testcase_2 
testcase_2_continued
Run Code Online (Sandbox Code Playgroud)

要么

testcase_1 testcase_1_continued
...
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,只能通过使用words或lines在输入上然后映射求解器函数来获得类似的东西来解决这个问题

[solver test1, solver test2, ...]
Run Code Online (Sandbox Code Playgroud)

一个人应该使用一个带有两个参数的函数,这两个参数是两个列表元素,一个接一个,并得到:

[solver test1 test1continued, solver test2 test2continued, ...]
Run Code Online (Sandbox Code Playgroud)

所以我很高兴找到一个类似的函数,map一次应用一个函数2的参数.我一直无法在Hoogle上找到任何东西,而且编写这样的函数也很容易,我正在寻找更多问题的一般方法.或者,如果我的方法(坚持map)肯定是错误的,那么我也可以指出正确的方向.

编辑:

我实际上发现实现一个函数map2非常有用,它将一个函数映射到一个列表,一次只能处理两个参数:

map2 f [a,b,c,d] ==> [f a b, f c d]
Run Code Online (Sandbox Code Playgroud)

Dan*_*ner 7

使用chunksOf.

> map (\[x, y] -> x + y) . chunksOf 2 $ [1..30]
[3,7,11,15,19,23,27,31,35,39,43,47,51,55,59]
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果列表具有奇数个元素,则会导致最后一个元素的模式匹配失败.类似的`[x + y | [x,y] < - chunk 2 [1..29]]`将截断列表. (3认同)