我尝试运行以下代码:
product (x:xs) = x * product xs
product [] = 1
sum [] = 0
sum (n:ns) = n + sum ns
sum [2,3,6]
product [2,3,4]
出于某种原因,它给了我";函数中的非穷举模式";错误,用于sum
和product
定义。
为什么这些模式不是详尽无遗的?我在一个空列表和一个包含1个或多个元素的列表中定义了函数。它还需要什么?
我使用的是The Glorious Glasgow Haskell Compilation System, version 9.2.4
,这些例子来自Graham Hutton的书。自2016年(本书撰写时(以来,Haskell编译器是否发生了变化。
在GHCi中,需要使用特殊命令:{
和:}
来封装多行定义;否则,正如注释中所指出的,第二行只是重新定义了第一行中定义的(分部(函数。
Prelude> :{
Prelude| product (x:xs) = x * product xs
Prelude| product [] = 1
Prelude| :}
Prelude>
请注意,输入:{
后,提示将从>
切换到|
,表示您正在输入多行定义。
或者,您可以在.hs
文件中编写代码,并在GHCi中编写:load
。这样做可以确保考虑定义的所有行。