![](/img/trans.png)
[英]what's the difference between two method below? just one line code difference
[英]What ist the difference between these two (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收到解析错误,但quicksort没有。 那么区别在哪里呢?
错误-> .hs:5:26:解析输入“ =”上的错误
一个在缩进中混合了制表符,而另一个仅使用空格。 这会引起问题,因为在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
-expression中的绑定未正确对齐,因此会产生语法错误。
通常,避免在Haskell中使用制表符进行缩进。 将您的编辑器配置为始终使用空格,它将为您节省很多麻烦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.