【问题标题】:What ist the difference between these two (Haskell)这两者有什么区别(Haskell)
【发布时间】:2013-05-06 16:52:05
【问题描述】:

我正在检查一些代码,然后我尝试编写其中一个,但我不断收到解析“=”错误,但是当我从源代码复制粘贴代码时它工作正常,那么这之间有什么区别;

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 中使用快速排序之前请记住这一点:en.literateprograms.org/… quicksort 旨在用于数组而不是列表。

标签: sorting haskell


【解决方案1】:

一个在缩进中混合了制表符,而另一个只使用空格。这会导致问题,因为空格在 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 中使用制表符进行缩进。将您的编辑器配置为始终使用空格,这样可以省去很多麻烦。

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多