Haskell初学者问题,单输入列表理解

hof1towb  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(193)

我是一个全新的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
我不是在找一个书面函数,我只是需要一些指导。

juzqafwq

juzqafwq1#

这里有几个键入错误和几个辛达错误,让我说明一下:

oddsDivisible3and7 :: Integral a => a -> [a]
oddsDivisible3and7 n = [x | x <- [1..n],
 x `mod` 3 == 0 && x `mod` 7 == 0 && x < 200 && x `mod` 2 /= 0]

首先,类型应为:Integral a => a -> [a]
然后,你想要被3除尽的,7和赔率(不能被2除尽),并且都小于200。
例如:

oddsDivisible3and7 500
=> [21,63,105,147,189]

相关问题