使用 Haskell 书中的示例时的函数中的非详尽模式

hey*_*you 0 haskell

我尝试运行这段代码:

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)

由于某种原因,它给了我“功能中的非详尽模式”错误,对于sumproduct定义。

为什么这些模式不是详尽无遗的?我已经在一个空列表和一个包含 1 个或多个元素的列表上定义了函数。它还需要什么?

我正在使用The Glorious Glasgow Haskell Compilation System, version 9.2.4这些例子来自 Graham Hutton 的书。自 2016 年(本书撰写之时)以来,Haskell 编译器发生了一些变化。

che*_*ner 5

在GHCi中,您需要使用特殊命令:{:}包含多行定义;否则,正如注释中所指出的,您的第二行只是重新定义您在第一行中定义的(部分)函数。

Prelude> :{
Prelude| product (x:xs) = x * product xs
Prelude| product [] = 1
Prelude| :}
Prelude>
Run Code Online (Sandbox Code Playgroud)

请注意,输入 后:{,提示符从 切换>|,表示您正在输入多行定义。

或者,您可以将代码写入.hs文件中,然后:load将其写入 GHCi 中。这样做可以确保考虑定义的所有行。

  • 或者写成一行,各部分用分号分隔 (3认同)