【问题标题】:Parse error in pattern: n + 1模式中的解析错误:n + 1
【发布时间】:2013-12-24 05:30:48
【问题描述】:

尝试在文件中加载函数:

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> 

这应该创建一个包含 n 次重复值 x 的列表:

ripeti :: Int -> a -> [a]
ripeti 0 x = []
ripeti (n+1) x = x:(ripeti n x)

这有什么问题?

【问题讨论】:

  • Haskell 不再支持所谓的 n+k 模式。看到这个问题:stackoverflow.com/questions/3748592/…
  • 你说得对,我在听 Erik Meijer 的课,说这是可能的
  • @ChrisTaylor 您应该这样做,但这是一个答案,因此可以将此问题标记为已关闭,我们可以为您提供互联网积分。
  • 您可以使用 :set -XHaskell98 来完成这项工作。
  • @jozefg 完成 - 感谢您的提示。

标签: haskell pattern-matching parse-error


【解决方案1】:

您的代码使用了一种称为“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

【讨论】:

    猜你喜欢
    • 2012-12-24
    • 1970-01-01
    • 2012-01-23
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 2015-03-14
    • 2012-09-28
    相关资源
    最近更新 更多