我收到以下错误,如果我尝试执行我的x_length函数,则应该测量给定列表的长度:
异常:test.hs:2:1-36:函数x_length中的非穷举模式
我使用将test.hs文件加载到ghci中Prelude>:l test.hs。
该x_length函数的实现是(在test.hs文件中):
x_length :: [Int] -> Int
x_length (x:xs) = 1 + x_length xs
Run Code Online (Sandbox Code Playgroud)
我已经知道,它必须与加载test.hs文件有关,但是我还没有弄清楚如何解决此问题。
我使用进行的实际函数调用x_length [1,2,3,4]。
bra*_*drn 10
再次查看您的定义:
x_length :: [Int] -> Int
x_length (x:xs) = 1 + x_length xs
Run Code Online (Sandbox Code Playgroud)
现在,我们来评估一下x_length [1,2,3,4]:
x_length [1,2,3,4]
x_length (1:2:3:4:[])
= 1 + x_length (2:3:4:[])
= 1 + 1 + x_length (3:4:[])
= 1 + 1 + 1 + x_length (4:[])
= 1 + 1 + 1 + 1 + x_length []
Run Code Online (Sandbox Code Playgroud)
但是您的定义没有匹配的理由[]!它具有大小写匹配(x:xs),但这需要列表中至少有一个元素。因此出现错误:“非穷举模式”;也就是说,有一种情况没有通过模式匹配。
要解决此问题,您需要为添加一个额外的大小写x_length []。因此,您的定义将如下所示:
x_length :: [Int] -> Int
x_length [] = _something
x_length (x:xs) = 1 + x_length xs
Run Code Online (Sandbox Code Playgroud)
一个适合您的小练习:应该_something是什么?(提示:一个空列表的长度是多少?)如果需要的话,我会在答案中加扰号。将鼠标悬停在其上即可显示答案。
x_length [] = 0
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |