输入“=”上的haskell解析错误

时间:2014-06-25 03:31:50

标签: haskell

quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
    let smallerOrEqual = [a | a <- xs, a <= x]
        larger = [a | a <- xs, a > x]
    in quicksort smallerOrEqual ++ [x] += larger

main = do
    a = [ 5, 1, 9, 4, 6, 7, 3]
    print quicksort a

我收到了这个错误:

[1 of 1] Compiling Main             ( quicksort.hs, quicksort.o )

quicksort.hs:10:11: parse error on input `='

真的不明白为什么。双重检查此代码几次。仍然令人困惑。 需要帮忙。 谢谢!

2 个答案:

答案 0 :(得分:4)

do个区块内,绑定必须以let关键字开头,因此该行应为let a = [ 5, 1, 9, 4, 6, 7, 3]

但是还有一些其他错误。您似乎错误输入了++运算符,而您忘记对列表的较大部分进行排序。您的打印声明无法正常工作,因为print quicksort a被解析为将函数quickSort和值a传递给print。您可以使用括号或函数应用程序运算符($)轻松解决此问题。这段代码完美无缺:

quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
    let smallerOrEqual = [a | a <- xs, a <= x]
        larger = [a | a <- xs, a > x]
    in quicksort smallerOrEqual ++ [x] ++ quickSort larger

main = do
    let a = [ 5, 1, 9, 4, 6, 7, 3]
    print $ quicksort a

答案 1 :(得分:3)

您忘记了let

quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
    let smallerOrEqual = [a | a <- xs, a <= x]
        larger = [a | a <- xs, a > x]
    in quicksort smallerOrEqual ++ [x] ++ quicksort larger -- ++ not +=

main = do
    let a = [ 5, 1, 9, 4, 6, 7, 3]
    print (quicksort a) -- The parens are needed too

我也解决了其他一些错误。

值得注意的是,这个快速排序并不合适,因此它并不是真正的快速排序,尽管很漂亮。

相关问题