我尝试运行这段代码:
product (x:xs) = x * product xs
product [] = 1
sum [] = 0
sum (n:ns) = n + sum ns
sum [2,3,6]
product [2,3,4]
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它给了我“功能中的非详尽模式”错误,对于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>
Run Code Online (Sandbox Code Playgroud)
请注意,输入 后:{,提示符从 切换>为|,表示您正在输入多行定义。
或者,您可以将代码写入.hs文件中,然后:load将其写入 GHCi 中。这样做可以确保考虑定义的所有行。