2013-05-06 50 views
1

我正在檢查一些代碼,然後我試圖寫其中的一個,但我不斷得到一個解析'='錯誤,但是當我複製粘貼代碼從源代碼它工作正常這有什麼區別;這兩個之間的區別是什麼(Haskell)

quicksort2 :: (Ord a) => [a] -> [a] 
quicksort2 [] = [] 
quicksort2 (x:xs) = 
    let smallerSorted = quicksort2 [a | a <- xs, a <= x] 
     biggerSorted = quicksort2 [a | a <- xs, a > x]  
    in smallerSorted ++ [x] ++ biggerSorted 

這;

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

quicksort2得到解析錯誤,但快速排序沒有。那麼區別在哪裏?

錯誤 - >名爲.hs:5:26:輸入解析錯誤'=」

+2

解析錯誤在哪裏? – jpaugh 2013-05-06 16:55:54

+2

請將完整的錯誤信息複製並粘貼到您的問題中。 – dave4420 2013-05-06 16:58:52

+0

它對更大的已排序 – nbdip 2013-05-06 17:02:35

回答

8

一個具有翼片的壓痕混合,而另一隻使用空間。這會導致問題,因爲Haskell中的空白非常重要,並且您的編輯器可能配置了與Haskell不同的選項卡寬度(它總是使用8)。所以它在編輯器中可能看起來不錯,但是對於編譯器來說,縮進全部搞砸了。

這是你的代碼看起來哈斯克爾:

quicksort2 :: (Ord a) => [a] -> [a] 
quicksort2 [] = [] 
quicksort2 (x:xs) = 
    let smallerSorted = quicksort2 [a | a <- xs, a <= x] 
      biggerSorted = quicksort2 [a | a <- xs, a > x]  
     in smallerSorted ++ [x] ++ biggerSorted 
^^^^^^^^ 
There are tabs here on the two lines above. 

這給出了一個語法錯誤,因爲在let -expression綁定沒有正確對齊。

通常,避免在Haskell中使用製表符縮進。配置你的編輯器總是使用空格,它會爲你節省很多麻煩。

相關問題