2016-08-11 58 views
1

我正在使用ghci。我有一個簡單的函數,它將列表中的每個元素加倍。當我試圖模式匹配,雙擊它在列表中的元素,但最終失敗,以下錯誤:Haskell模式代碼失敗,出現錯誤「函數中的非窮舉模式」

*Main> let double [] = [] 
*Main> let double (x:xs) = (2*x) : double xs 
*Main> double [10,2,0,5] 
[20,4,0,10*** Exception: <interactive>:52:5-37: Non-exhaustive patterns in function double 

我得到了相同的功能與警衛和模式工作。不知道當我單獨使用模式時我做錯了什麼。請指教。

*Main> let double (x:xs) | null xs = [2* x] | otherwise = (2*x) : (double xs) 
*Main> double [10,2,0,5] 
[20,4,0,10] 
+3

第二個'let'重寫第一個。 – ErikR

回答

6

你的第二個let正在定義一個新的double。您可以像這樣在GHCi中定義多行功能。

λ :{ 
| let 
| double :: Num a => [a] -> [a] 
| double [] = [] 
| double (x:xs) = 2 * x : double xs 
| :} 
λ double [1,2,3] 
[2,4,6] 

注意,這相當於map (2*)

相關問題