我之前从未编程过,我刚刚(1周前)开始学习!第一个课程是函数式编程,使用 Haskell。
我有一项学校作业,我希望通过删除一两步来改进,但是我的方法中有一个讨厌的错误。
基本上,我创建了一个列表,我得到了[Integer]
类型的结果,而我想将其转换为Integer
,如果可能的话?我已将我的测试函数设置为接受类型Integer -> Integer -> Bool
(接受两个值,计算它们并返回一个bool)。测试函数将值放入两个函数中并比较它们的结果。
我可以将预期的类型更改为[Integer]
(?),但这会消除手动输入值的选项。
对于我的测试用例,我选择了一些值并将它们放入列表中。 a = [0, 2, (-3)]
和b = [0, 2, 4]
。我在调用函数时要做的是输入a
和b
作为值,而不是每次都输入每个测试用例。这可能吗?例如:
testFunction a b
而不是
testFunction Integer Integer.
我希望我有道理:-)请记住我只是在学习!
答案 0 :(得分:1)
不要让这对你来说太复杂,你似乎要寻找的是能够将两个Integers列表传递给一个接受整数的函数,以执行逐元素操作。
为此,您可以使用zipWith
,其类型签名为:
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
此类型签名意味着zipWith接受一个接受两个单独元素的函数,以及两个列表,并返回基于您传递的函数结果构建的列表。
总而言之,您将执行:
zipWith myFunction [1,2,3,4] [5,6,7,8]
现在,您要创建一个首先在两个函数中使用zipWith
的函数,然后再次使用zipWith
来比较两个结果列表,最后返回布尔值。如果你想要更复杂,你可以使用最后的and
函数,如果所有布尔值都是True
,则返回一个布尔值。
现在,构建该功能留给读者一个练习:)
我希望这会有所帮助。