Haskell中的缩进代码

Haskell中的缩进代码,haskell,Haskell,我知道缩进在Haskell中很重要。我如何缩进这个程序 qsort [] =[] qsort (x:xs) = let bigsorted = [a| a<-xs,a>=x] smallsorted= [a| a<-xs,a<x] in qsort bigsorted ++ [x] ++ smallsorted 我正在使用vim编辑器。有什么方法可以自动缩进程序吗?这里smallsorted不是let块的一部分 qsort [] =

我知道缩进在Haskell中很重要。我如何缩进这个程序

qsort [] =[]
qsort (x:xs) = let bigsorted = [a| a<-xs,a>=x]
       smallsorted= [a| a<-xs,a<x]
       in qsort bigsorted ++ [x] ++ smallsorted

我正在使用vim编辑器。有什么方法可以自动缩进程序吗?

这里smallsorted不是let块的一部分

qsort []     = []
qsort (x:xs) = 
  let bigsorted   = [a | a <- xs, a >= x]
      smallsorted = [a | a <- xs, a < x]
  in  qsort bigsorted ++ [x] ++ smallsorted
qsort [] =[]
qsort (x:xs) = let bigsorted = [a| a<-xs,a>=x]
                   smallsorted= [a| a<-xs,a<x]
                in qsort bigsorted ++ [x] ++ smallsorted

要记住的一个简单规则是将某个组的项目缩进到比该组开头更靠右的位置。例如,让我们看一下绑定绑定组:

let
  x = 2 + 3 -- this line is indented further than "let" which starts the group.
  y = x + x -- next lines are usually indented on the same level
另一个例子是do块:

do
  line <- getLine
  putStrLn line
更多详细信息可在Haskell wiki中找到:

在您的示例中,smallSorted的缩进小于let组的开头,因此它未被识别为let组的一部分

Emacs haskell模式中存在半自动压痕。实际上,缩进有三种不同的模式,但没有一种工作得很好,因为要消除用户真正的意思并不容易。关于Haskell wiki的更多详细信息:

只是一种风格上的东西-如果你像我一样喜欢用这种格式编写代码,你可以使用where,尽管这意味着你还需要将最终表达式放在开头而不是结尾

qsort [] =[]
qsort (x:xs) = qsort bigsorted ++ [x] ++ smallsorted where
       bigsorted = [a| a<-xs,a>=x]
       smallsorted= [a| a<-xs,a<x]

似乎您还需要对smallsorted进行qsort,以获得实际的快速排序实现;