【发布时间】:2019-05-08 09:11:50
【问题描述】:
我收到以下错误,如果我尝试执行我的 x_length 函数,那应该测量给定列表的长度:
例外:test.hs:2:1-36:函数 x_length 中的非详尽模式
我使用Prelude>:l test.hs 将我的test.hs 文件加载到ghci 中。
x_length函数的实现是(在test.hs文件内):
x_length :: [Int] -> Int
x_length (x:xs) = 1 + x_length xs
我已经想通了,它必须与加载test.hs 文件有关,但我还没有想通,如何解决这个问题。
我使用x_length [1,2,3,4] 进行的实际函数调用。
【问题讨论】:
-
提示:
(x:xs)匹配哪些列表?如果仍有疑问,请尝试“手动”评估您的功能以获得合理的简短列表,然后看看会发生什么 -
您的代码明显的逻辑问题是
x_length从不返回值。它总是调用自己(它再次调用自己(它再次调用自己(which ...)))。 -
如果你到达列表的end,所以它是
[]而不是(x:xs)? -
@RobinZigmond 对我来说都是 _|_。
-
启用警告会使 GHC 报告错过的
[]案例。我建议始终启用警告。