2016-01-22 124 views
1

我需要爲我的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-返回碼(TRUE | FALSE),以確定閹算我的詮釋,或根本沒有。我不知道如何繼續編寫這個腳本。

在這種情況下,說上輸入

解析錯誤 '|'

我嘗試另一個腳本,有它給人的錯誤

無法比擬預期的類型「詮釋」實際「BOOL」類型。

這樣的功能isEven工作,但我不知道如何「真實」的語句來轉換成我的if語句。

+0

你不需要'ISEVEN(-1)= FALSE'如果你偶然的負面情況下'| x <0 = isEven(-x)'。 – Landei

回答

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 
+0

感謝,讓一切更容易理解:) – Side2005

+0

沒有任何錯誤編譯,仍然給我下面的錯誤當試圖countEven [2,4,5,6]: 非詳盡模式插件功能countEven 是什麼意思呢? – Side2005

+4

沒關係,發現自己:) 錯誤添加countEven [] = 0所做的事情 – Side2005