我是哈斯克尔的菜鸟。我阅读了现实世界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 '='"
,问题是什么?
答案 0 :(得分:4)
错误在以下两行中:
let xsmall = mquicksort [a | a <- xs, a <= x]
xbig = mquicksort [a | a <- xs, a > x ]
错误的原因显然是Haskell中混淆/问题的重要原因。关键是在Haskell中,同一块中的行需要在左侧排列。因此,xsmall
和xbig
应该直接排列在一起。
请参阅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 ]