将[整数]转换为整数

3

我以前从未编程过,最近(1周前)才开始学习!第一门课是使用Haskell的函数式编程。

我有一个学校作业,想通过删除一两个步骤来改进它,但有一个讨厌的错误阻碍了我。

基本上,我创建了一个列表,并且得到了类型为[Integer]的结果,而我希望在可能的情况下将其转换为Integer。我已将我的测试函数设置为接受类型Integer -> Integer -> Bool(接受两个值,计算它们并返回一个布尔值)。测试函数将这些值放入两个函数中并比较它们的结果。

我可以只更改预期类型为[Integer](?),但那样会消除手动输入值的选项。

对于我的测试用例,我选择了一些值并将它们放入列表中。a = [0, 2, (-3)]b = [0, 2, 4]。当我调用函数时,我想输入ab作为值,而不是每次都手动输入每个测试用例。这可行吗?例如:

testFunction a b

而不是像这样

testFunction Integer Integer.

我希望我说得清楚 :-) 请记住,我只是在学习!


不是很清楚你想做什么。看起来你想从两个列表中提取测试值并传递给测试函数。你想执行ab中每个元素的组合,还是只想执行像testFunction 0 0testFunction 2 2testFunction (-3) 4这样的值对? - bheklilr
2
这听起来像是你想要一个函数 testFunction :: [Integer] -> [Integer] -> [Bool],在每一步中它会取出两个列表的第一个元素,运行你的函数 testFunction 然后将结果添加到之前计算版本的列表中。看看能否想出一种用 Haskell 表达这个函数的方式。 - C. Quilley
1
另一个提示:尝试在hoogle中输入所需的类型签名,看看会返回什么。我敢打赌,在前十个建议中,你可能会找到一些有用的东西。 - bheklilr
@bheklilr 对不起如果我有点不清楚,我不确定如何表达我的问题,哈哈。英语不是我的母语。 :) - Rewbert
@Rewbert,如果您的情况适用于内置的zipWith函数,则可以使用它,但我强烈建议您尝试自己实现递归,这样您将在过程中学到很多东西。实现这个函数并不是很困难。首先实现zip(在GHCi中尝试一下以了解其功能),然后尝试实现zipWith。您将需要使用递归来完成。 - bheklilr
显示剩余3条评论
1个回答

1

不要让这对您太复杂,您似乎正在寻找的是将两个整数列表传递给接受整数的函数以执行逐元素操作的能力。

为此,您可以使用 zipWith,它具有以下类型签名:

zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]

这个类型签名意味着zipWith接受一个函数,该函数接受两个单独的元素和两个列表,并返回基于传递的函数结果构建的列表。
总之,您将执行以下操作:
zipWith myFunction [1,2,3,4] [5,6,7,8]

现在,您希望创建一个函数,首先对您的两个函数中的每一个使用zipWith,然后再次使用zipWith比较两个结果列表,最终返回布尔值。如果您想更加复杂化,可以在最后使用and函数返回单个布尔值,如果所有布尔值都是True。现在,构建该函数留给读者作为练习 :) 我希望这可以帮助到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接