尝试在文件中加载函数:
Prelude> :load "prova.hs"
prova.hs:37:9: Parse error in pattern: n + 1
[1 of 1] Compiling Main ( prova.hs, interpreted )
Failed, modules loaded: none.
Prelude>
这应该创建一个列表,其中包含重复值 x 的 n 倍:
ripeti :: Int -> a -> [a]
ripeti 0 x = []
ripeti (n+1) x = x:(ripeti n x)
这是怎么回事?
最佳答案
您的代码使用了“n + k 模式”,Haskell 2010 不支持这些模式(Haskell 98 支持它们)。
您可以在 this SO question 阅读更多相关信息。 .
要使代码正常工作,您可以编写
ripeti :: Int -> a -> [a]
ripeti 0 x = []
ripeti n x = x : ripeti (n-1) x
请注意,如果您为 n
提供负值,这不会终止,所以我宁愿定义
ripeti :: Int -> a -> [a]
ripeti n x | n <= 0 = []
| otherwise = x : ripeti (n-1) x
关于haskell - 模式 : n + 1 中的解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20431106/