使用haskell书中的示例时,函数中的非穷举模式

  • 本文关键字:函数 模式 haskell 使用 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]

出于某种原因,它给了我";函数中的非穷举模式";错误,用于sumproduct定义。

为什么这些模式不是详尽无遗的?我在一个空列表和一个包含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。这样做可以确保考虑定义的所有行。

最新更新