首页 文章

函数中的非穷举模式(Haskell)[重复]

提问于
浏览
1

这个问题在这里已有答案:

我有两个代码片段引发相同的错误:

Prelude> sum' [] = 0
Prelude> sum' (x:xs) = x + sum' xs
Prelude> sum' [1,2,3,4,5]
*** Exception: <interactive>:142:1-25: Non-exhaustive patterns in function sum'

以及以下内容:

Prelude> prod [] = 1
Prelude> prod (x:xs) = x * (prod xs)
Prelude> prod [1,2,3,4,5]
*** Exception: <interactive>:139:1-27: Non-exhaustive patterns in function prod

我必须错过一个模式,但它是什么?另外,我这样的错误怎么办?在使用模式匹配定义函数时,我应该怎么想? (我要求方法/技术)

1 回答

  • 2

    要创建具有模式匹配的函数,或者在ghci的命令行中使用多行,您应该使用 {} 并在您的情况下与 ; 分开:

    Prelude> let { sum' [] = 0 ; sum' (x:xs) = x + sum' xs }
    Prelude> sum' [1,2,3,4,5]
    => 15
    

    否则你只会将一个等式(在这种情况下是最后一个)绑定到函数名 sum' ,这就是为什么你得到一个模式匹配失败的原因

相关问题