我正在检查一些代码,然后我试着编写其中一个,但我不断得到一个解析'='错误,但是当我从源代码粘贴代码时它工作得很好,所以它之间有什么区别;
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得到解析错误,但quicksort没有。那么差异在哪里呢?
错误 - &gt; .hs:5:26:输入`='
时解析错误答案 0 :(得分:8)
其中一个标签在缩进中混合,而另一个仅使用空格。这会导致问题,因为空格在Haskell中非常重要,并且您的编辑器可能配置了与Haskell不同的选项卡宽度(总是使用8)。所以它在你的编辑器中可能看起来没问题,但是对于编译器来说,缩进都搞砸了。
这是您的代码对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
^^^^^^^^
There are tabs here on the two lines above.
这会产生语法错误,因为let
- 表达式中的绑定未正确对齐。
通常,避免在Haskell中使用制表符进行缩进。将编辑器配置为始终使用空格,这将为您节省很多麻烦。