在 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/