尝试在文件中加载功能:

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

07-27 13:43