繁体   English   中英

这两者之间有什么区别(Haskell)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM