Haskell:为元组中的每个列表调用一个函数

Haskell:为元组中的每个列表调用一个函数,haskell,tuples,Haskell,Tuples,我想用Haskell解决一个黑客银行的问题 我已经实现了解决这个问题的逻辑,尽管在获取输入和解析到所需形状时遇到了一些困难 代码: 我知道splitAt函数返回一个元组。所以我需要帮助解析这里的元组 我需要为元组中的每个列表调用solve函数,并将结果附加到输出 有人能帮我解决这个问题吗?一个简单的方法就是用一个简单的匿名函数替换你的map solve: main = interact $ unlines . (\(a, b) -> [solve a, solve b]) . splitA

我想用Haskell解决一个黑客银行的问题

我已经实现了解决这个问题的逻辑,尽管在获取输入和解析到所需形状时遇到了一些困难

代码:

我知道splitAt函数返回一个元组。所以我需要帮助解析这里的元组

我需要为元组中的每个列表调用solve函数,并将结果附加到输出


有人能帮我解决这个问题吗?

一个简单的方法就是用一个简单的匿名函数替换你的
map solve

main = interact $ unlines . (\(a, b) -> [solve a, solve b]) . splitAt 3 . map read . tail . words

如果您不喜欢匿名函数,您可以总是以某种名称提取它并将其定义为顶级函数或
where
子句

您不需要
拆分3
,您需要。如果你没有Data.List.Split在hackerrank上可用,你需要以这样或那样的方式重新实现块。

splitAt 3
的输出看起来像,
[[1,2,3],[4,5,6],[7,8,9],…]
,但在这个例子中提到的只是a和b,我没有完全理解。你能解释一下吗?哦,我想你指的是,正如你所看到的,返回一对列表。特别是正如你在问题中所说,它返回一个元组。如果它确实返回列表列表,那么您的原始
map solve
应该可以编译并正常工作,并且不需要这个问题。使用
map solve
,我得到了错误。检查此项是否有与我预期相符的完整错误跟踪-它表明
splitAt 3
的输出确实是一对列表,因此我上面的答案应该可以。如果您遇到不同的错误,请告诉我,我承认我没有机会测试它。@RobinZigmond问题是,
splitAt
不是他们想要的,因此您可以对结果做的任何事情都没有好处。
main = interact $ unlines . (\(a, b) -> [solve a, solve b]) . splitAt 3 . map read . tail . words