【问题标题】:using Haskell functions inside functions在函数内部使用 Haskell 函数
【发布时间】:2016-01-22 00:05:10
【问题描述】:

我的 Haskell 练习需要一点提示。

首先我必须实现一个程序,它检查一个整数是否为偶数...到目前为止,我的代码完美无缺

isEven :: Int -> Bool
isEven 0 = True
isEven (-1) = False
isEven 1 = False
isEven x
        |x<0 = isEven (x+2)
        |x>0 = isEven (x-2)

接下来我必须使用这个函数来计算列表中的所有偶数。 我到目前为止的代码:

countEven :: [Int] -> Int
countEven (x:xs) = (isEven x)
                           |True = 1 + countEven xs
                           |False = 0 + countEven xs

我想使用 isEven-returncode (True|False) 来确定是否计算我的 Int。我不知道如何继续编写这个脚本。

在这种情况下,它说

输入“|”解析错误

我尝试了另一个脚本,但它给出了错误

无法将预期类型“Int”与实际类型“Bool”匹配。

因此,isEven 函数正在工作,但我不知道如何将“True”语句转换为我的 if 语句。

【问题讨论】:

  • 如果您将否定情况转成| x&lt;0 = isEven (-x),则不需要isEven (-1) = False

标签: haskell


【解决方案1】:

以下任何一项工作:

countEven (x:xs) = if isEven x then 1 + countEven xs else 0 + countEven xs
countEven (x:xs) = (if isEven x then 1 else 0) + countEven xs
countEven (x:xs) = case isEven x of
    True -> 1 + countEven xs
    False -> 0 + countEven xs
countEven (x:xs)
   | isEven x  = 1 + countEven xs
   | otherwise = 0 + countEven xs

【讨论】:

  • 编译没有任何错误,在尝试 countEven [2,4,5,6] 时仍然给我以下错误:非详尽模式 ins function countEven 是什么意思?
  • 好的,我自己发现了错误:) 添加 countEven [] = 0 就成功了
  • @Side2005 如果这个答案对你有用,你能接受吗? (点击投票箭头下方的勾号)
猜你喜欢
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
相关资源
最近更新 更多