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

标签 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)

这是怎么回事?

最佳答案

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

相关文章:

scala - 追加到列表模式匹配

haskell - 在 Haskell 中,变量前面的下划线是什么意思?

haskell - Erlang 柯里化(Currying)函数

pattern-matching - 模式匹配中的 OCaml 多态变体

Java 提取子字符串

c - XC8 错误 224 : illegal # directive (first line)

php - 在 PHP5 中记录致命/解析错误

PHP - 使用新函数时如何避免旧服务器上的解析错误

haskell - 将类型级别列表转换为值

haskell - 如何在 haskell 中使用柯里化(Currying)参数评估函数?