[英]mapping a function to a list in Haskell 2 elements a time
我在Haskell尝试了一些问题(在Spoj ),我偶然发现了一些有输入形式的问题:
testcase_1
testcase_1_continued
testcase_2
testcase_2_continued
要么
testcase_1 testcase_1_continued
...
正如您所看到的,只能通过在输入上使用words
或lines
来解决这个问题,然后映射求解器函数以获得类似
[solver test1, solver test2, ...]
一个人应该使用一个带有两个参数的函数,它们是两个列表元素,一个接着一个,并得到:
[solver test1 test1continued, solver test2 test2continued, ...]
所以我很高兴找到一个类似的map
函数,它一次应用一个函数2参数。我一直无法在Hoogle上找到任何东西,但是编写这样的函数很容易,我正在寻找一个问题的更一般方法。或者,如果我的方法(坚持map
)肯定是错误的,那么我也可以指出正确的方向。
我实际上发现实现一个函数map2非常有用,它将一个函数映射到一个列表,一次只能处理两个参数:
map2 f [a,b,c,d] ==> [f a b, f c d]
使用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]
map
是一个很好的方法,如果你的数据是这样的结构,你可能想稍微改变它以更好地适应语义。 要做到这一点的方法之一将是“对了”的结果lines
,让你得到[(line1, line2),(line3, line4),...]
map的第一个参数将是一个适用于这些元组的函数。
编辑:要进行扩展,通常的方法是读取输入,将其格式化为语义上有意义的格式,然后在结果上映射或折叠求解函数。 确切的解决方案取决于输入数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.