haskell - haskell中奇/偶函数的相互递归

标签 haskell recursion ghci

在 Graham Hutton 的“Haskell 编程”的第 6 章中,有一个名为“6.5 相互递归”的部分,其中包含以下示例:

even :: Int -> Bool
even 0       = True
even (n + 1) = odd n

odd :: Int -> Bool
odd 0       = False
odd (n + 1) = even n

我想试试看。我将代码放在 Hof.hs 文件中,运行 ghci(版本 7.8.3),输入
:l Hof.hs

并收到以下错误消息

Hof.hs:3:7:模式中的解析错误:n + 1
失败,加载模块:无。

为什么我会收到此消息?代码在语法上是过时的还是什么?

最佳答案

n + k patterns have been removed来自 Haskell 并且不再可用。改为这样写:

even :: Int -> Bool
even 0 = True
even n = odd (n - 1)

odd :: Int -> Bool
odd 0 = False
odd n = even (n - 1)

请注意,此函数对于负输入会严重失败,因此您可能希望使用 abs 对其进行扩充。 .

关于haskell - haskell中奇/偶函数的相互递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28431125/

相关文章:

haskell - 根据时间限制管道?

haskell - Haskell 迷你语言

javascript - 递归删除具有相同 id 的 JSON 对象

language-agnostic - 关于递归的一般问题

haskell - Yesod-平台安装因 Alex 包而失败

haskell - 如何从 Yesod 中的小书签进行身份验证/如何将选项添加到 Yesod 的 Auth 子站点

javascript - 使用递归 JavaScript 函数进行同步的优点和缺点

haskell - 在交互式 session 中在 haskell 中漂亮地垂直打印列表

haskell - 无法将 HUnit 导入 ghci

haskell - IO/Monadic 分配运算符导致 ghci 为无限列表爆炸