2016-08-05 51 views
0

我在Haskell的代碼片段下面實現了一個快速排序算法。如何使用「let」關鍵字在Haskell中定義多個變量

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

但是它不會被GHCI編譯並且它告訴第5行有語法錯誤。但我已經檢查了「let」關鍵字的Haskell語法,它似乎沒問題。有沒有人可以幫助我解決這個問題?非常感謝。

+0

因爲'let'不能在同一列的功能的,在這種情況下,第1欄只需添加一個空間開始5 – HuStmpHrrr

+0

有點unreladely你的問題行的開頭,但它可以幫助你不知何故,如果你正在學習haskell:請注意,這個算法不是真正的快速排序。它不使用常量內存。 http://augustss.blogspot.cz/2007/08/quicksort-in-haskell-quicksort-is.html – user1747134

回答

7

您需要縮進let表達式,因爲它是前一行的延續。

quicksort :: (Ord a) => [a] -> [a] 
quicksort [] = [] 
quicksort (x:xs) = 
    let smaller = quicksort [a | a <- xs, a <= x] 
     bigger = quicksort [a | a <- xs, a > x] 
    in smaller ++ [x] ++ bigger 
相關問題