简单快速排序算法上的haskell解析错误

时间:2013-12-26 03:34:18

标签: haskell

我是哈斯克尔的菜鸟。我阅读了现实世界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 '='",问题是什么?

1 个答案:

答案 0 :(得分:4)

错误在以下两行中:

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 ]