我正在检查一些代码,然后我试着写其中一个,但我一直得到一个解析'='错误但是当我复制从源代码粘贴代码它工作正常,这有什么区别;
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
Run Code Online (Sandbox Code Playgroud)
还有这个 ;
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
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
这会产生语法错误,因为let-expression中的绑定未正确对齐.
通常,避免在Haskell中使用制表符进行缩进.将编辑器配置为始终使用空格,这将为您节省很多麻烦.