【问题标题】:Haskell Beginner problems, list comprehension with single inputHaskell 初学者问题,单输入列表理解
【发布时间】: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] -&gt; [Integer],这意味着“一个接受整数列表并返回整数列表的函数”
  • 如果您想要“所有小于 200 且可被 3 和 7 整除的奇数”,那么我看不出您将如何有效地实现该功能。这完全指定了没有任何输入的结果,所以它只是一个数字列表。
  • 输入应该确定要制作的列表的长度?或者返回我相信因为我有一个主要的工作,这就是函数的调用方式。 putStrLn("输入:200") putStr("输出:") print(oddsDivisible3and7 200) putStrLn("")
  • 我也很确定这应该只是一般编码的练习,而不是任何超级有用的fui
  • 哦,数字200应该是输入?如果它应该是输入,则不能在函数中对其进行硬编码。

标签: haskell functional-programming


【解决方案1】:

有一些类型错误和一些sintax错误,让我展示一下:

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 =&gt; a -&gt; [a]

那么,你想要能被 3 整除的 7 和赔率(不能被 2 整除),并且都小于 200。

示例:

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

【讨论】:

    猜你喜欢
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    相关资源
    最近更新 更多