【发布时间】:2020-02-07 09:51:22
【问题描述】:
总的来说,我对 Haskell 和函数编程是全新的。我正在实验室工作,并坚持我的列表理解问题。
问题是创建一个函数,仅使用列表推导式查找小于 200 且可被 3 和 7 整除的所有奇数
这是我的代码:
oddsDivisible3and7 :: Integer -> Integer -> Integer -> Integer -> [Integer]
oddsDivisible3and7 xs = [x | x <- [1..xs],x mod 3 == 0 && x mod 7 == 0,x < 200]
以及它抛出的错误:
• Couldn't match expected type ‘(Integer -> Integer -> Integer)
-> Integer -> Integer’
with actual type ‘Integer’
• The function ‘x’ is applied to two arguments,
but its type ‘Integer’ has none
In the first argument of ‘(==)’, namely ‘x mod 3’
In the first argument of ‘(&&)’, namely ‘x mod 3 == 0’
与mod 7 的另一个块
不是在寻找书面功能,我只是需要一些指导。
【问题讨论】:
-
如果你的函数接受一个整数列表,它的签名必须是
oddsDivisible3and7 :: [Integer] -> [Integer],这意味着“一个接受整数列表并返回整数列表的函数” -
如果您想要“所有小于 200 且可被 3 和 7 整除的奇数”,那么我看不出您将如何有效地实现该功能。这完全指定了没有任何输入的结果,所以它只是一个数字列表。
-
输入应该确定要制作的列表的长度?或者返回我相信因为我有一个主要的工作,这就是函数的调用方式。 putStrLn("输入:200") putStr("输出:") print(oddsDivisible3and7 200) putStrLn("")
-
我也很确定这应该只是一般编码的练习,而不是任何超级有用的fui
-
哦,数字200应该是输入?如果它应该是输入,则不能在函数中对其进行硬编码。
标签: haskell functional-programming