Haskell 模式代码因错误而失败 "Non-exhaustive patterns in function"
Haskell patterns code failing with error "Non-exhaustive patterns in function"
我正在使用 ghci。我有一个简单的函数,可以将列表中的每个元素加倍。当我尝试模式匹配时,它使列表中的元素加倍但最终失败并出现以下错误:
*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]
您的第二个 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*)
。
我正在使用 ghci。我有一个简单的函数,可以将列表中的每个元素加倍。当我尝试模式匹配时,它使列表中的元素加倍但最终失败并出现以下错误:
*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]
您的第二个 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*)
。