在函数内部使用Haskell函数

时间:2016-01-22 00:05:11

标签: haskell

我需要一点提示我的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。我不知道如何继续编写这个脚本。

在这种情况下,它说

  

在输入&#39; |&#39;

上解析错误

我尝试了另一个脚本并在那里发出错误

  

无法匹配期望的类型&#39; Int&#39;实际类型&#39; Bool&#39;。

因此函数isEven正在运行,但我并不确切知道如何将&#34; True&#34; -statement转换为我的if语句。

1 个答案:

答案 0 :(得分:4)

以下任何工作:

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