模式中的解析错误:n + 1

时间:2013-12-06 18:32:49

标签: haskell pattern-matching parse-error

尝试在文件中加载函数:

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)

它出了什么问题?

1 个答案:

答案 0 :(得分:10)

您的代码使用的是“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