Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每次将函数映射到Haskell中的列表2个元素_Haskell - Fatal编程技术网

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

每次将函数映射到Haskell中的列表2个元素,haskell,Haskell,我正在尝试Haskell中的几个问题(at),我偶然发现了不少有表单输入的问题: testcase_1 testcase_1_continued testcase_2 testcase_2_continued 或 如您所见,仅使用输入上的单词或行,然后映射解算器函数以获得类似于 [solver test1, solver test2, ...] 应使用带有两个参数的函数,这两个参数是两个列表元素,一个接一个,并获得: [solver test1 test1continued, solver

我正在尝试Haskell中的几个问题(at),我偶然发现了不少有表单输入的问题:

testcase_1
testcase_1_continued
testcase_2 
testcase_2_continued

如您所见,仅使用输入上的
单词
,然后映射解算器函数以获得类似于

[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]

map
是一种很好的方法,如果您的数据是这样的结构,您可能需要稍微修改它以更好地适应语义。一种方法是将
行的结果“配对”
,从而得到
[(第1行,第2行),(第3行,第4行),…]
。map的第一个参数将是一个作用于这些元组的函数

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

使用


惯用的Haskell是使用
zipWith
并沿着列表和同一列表的尾部(短一个元素)压缩。可以说,Data.List应该有一个直接执行此操作的函数,但Data.List已经相当大了。@Stephentelley:这将为您提供重叠的相邻元素对,例如
[(1,2)、(2,3)、(3,4),…]
,而如果我正确理解OP,他希望它们不重叠,例如
[(1,2)、(3,4),…]
请注意,如果列表中的元素数为奇数,则会导致最后一个元素的模式匹配失败。类似的
[x+y |[x,y]@hammar spoj应该只给出有效的测试用例。哇,这是一个嵌入haskell模块的函数!更新了使用
chunksOf
chunk
的答案。只是为了澄清:
chunk
不推荐使用是因为邮件列表循环,而不是因为任何删除它的意图。所以选择
chunksOf
,以满足您自己的审美需求。
map2 f [a,b,c,d] ==> [f a b, f c d]
> map (\[x, y] -> x + y) . chunksOf 2 $ [1..30]
[3,7,11,15,19,23,27,31,35,39,43,47,51,55,59]