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



我正在Haskell尝试一些问题(在Spoj),我偶然发现了很多输入表格的问题:

testcase_1
testcase_1_continued
testcase_2 
testcase_2_continued

testcase_1 testcase_1_continued
...

如您所见,仅通过在输入上使用wordslines然后映射求解器函数以获得类似的东西来解决此问题

[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 的第一个参数将是处理这些元组的函数。

编辑:为了扩展这一点,一般方法是读取输入,将其格式化为语义有意义的格式,然后在结果上映射或折叠求解函数。确切的解决方案取决于输入数据。

最新更新