我知道缩进在Haskell中很重要。我怎么能缩进这个程序?
qsort [] =[]
qsort (x:xs) = let bigsorted = [a| a<-xs,a>=x]
smallsorted= [a| a<-xs,a<x]
in qsort bigsorted ++ [x] ++ smallsorted
我正在使用vim编辑器。有没有什么方法可以自动缩进程序?
答案 0 :(得分:6)
要记住的一个简单规则是将某个组的项目进一步缩进到该组的开头。例如,让我们看看let-bindings组:
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-block:
do
line <- getLine
putStrLn line
更多细节可以在Haskell wiki中找到:http://en.wikibooks.org/wiki/Haskell/Indentation
在你的例子中,“smallSorted”的缩进比let-group的开头少,因此它不被认为是let-group的一部分。
Emacs haskell-mode中存在半自动缩进。实际上,缩进有三种不同的模式,但没有一种模式可以很好地工作,因为消除用户真正意义的含义并不容易。关于Haskell wiki的更多细节: http://www.haskell.org/haskellwiki/Haskell_mode_for_Emacs#Indentation
答案 1 :(得分:5)
qsort [] = []
qsort (x:xs) =
let bigsorted = [a | a <- xs, a >= x]
smallsorted = [a | a <- xs, a < x]
in qsort bigsorted ++ [x] ++ smallsorted
答案 2 :(得分:4)
这里smallsorted不是let块的一部分。
qsort [] =[]
qsort (x:xs) = let bigsorted = [a| a<-xs,a>=x]
smallsorted= [a| a<-xs,a<x]
in qsort bigsorted ++ [x] ++ smallsorted
答案 3 :(得分:1)
只是一种风格化的东西 - 如果你喜欢以那种格式编写代码(就像我一样),你可以使用where
,虽然这意味着你还需要将你的最终表达式放在开头而不是结束。
qsort [] =[]
qsort (x:xs) = qsort bigsorted ++ [x] ++ smallsorted where
bigsorted = [a| a<-xs,a>=x]
smallsorted= [a| a<-xs,a<x]