【问题标题】:haskell parse error on the simple quicksort algorithm简单快速排序算法的haskell解析错误
【发布时间】:2013-12-26 11:45:26
【问题描述】:

我是haskell的菜鸟。我阅读了real world haskell一书,并编写了以下代码作为标准示例,但它在某种程度上是错误的。

mquicksort::(Ord a) => [a] -> [a]
mquicksort [] = []
mquicksort (x:xs) =
    let xsmall = mquicksort [a | a <- xs, a <= x]
          xbig = mquicksort [a | a <- xs, a > x ]
    in xmall ++ [x] ++ xbig

GHCI 说"parse error on input '='",有什么问题?

【问题讨论】:

    标签: haskell


    【解决方案1】:

    错误在这两行:

    let xsmall = mquicksort [a | a <- xs, a <= x]
          xbig = mquicksort [a | a <- xs, a > x ]
    

    错误的原因显然是 Haskell 中混乱/问题的一大来源。关键是在 Haskell 中,同一块中的行需要在左侧对齐。所以,xsmallxbig 应该直接在彼此的顶部排列。

    http://en.wikibooks.org/wiki/Haskell/Indentation

    编辑:你还有一个错字,在最后一行写了xmall,我猜你的意思是xsmall

    编辑 2,澄清:您想要的代码是:

    let xsmall = mquicksort [a | a <- xs, a <= x]
        xbig = mquicksort [a | a <- xs, a > x ]
    

    let xsmall = mquicksort [a | a <- xs, a <= x]
        xbig   = mquicksort [a | a <- xs, a > x ]
    

    【讨论】:

    • Ehh,我认为通过= 运算符对齐它们是一个很好的约定。好伤心。
    • @richard.g 是的,您仍然可以像我的第二个示例中那样排列等号。我承认您的原始代码可能看起来更好一些。
    • 如果你愿意,你也可以使用带有大括号和分号的显式块来代替布局。
    • @RomanCheplyaka 最好学习一下布局是如何工作的,只有在你习惯了之后,再决定是否使用显式的大括号和分号,从而在知识的基础上做出决定,而不是而不是无知。
    猜你喜欢
    • 2021-09-21
    • 1970-01-01
    • 2022-10-06
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多