我刚刚开始教自己Haskell出自"为了好的方面了解你一个好的东西"一书,我在第5章中使用where以下内容重写了快速排序:
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) = smaller ++ [x] ++ bigger
where smaller = quicksort [a | a <- xs, a <= x]
bigger = quicksort [a |a <- xs, a > x]
Run Code Online (Sandbox Code Playgroud)
但是当我将它加载到GHCi 7.0.3中时,我收到以下错误:
parse error on input '='
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)
你能帮我找到它为什么不能用where吗?
那是空白规则.您的定义where必须在同一个空格缩进处.这将编译:
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) = smaller ++ [x] ++ bigger
where smaller = quicksort [a | a <- xs, a <= x]
bigger = quicksort [a |a <- xs, a > x]
Run Code Online (Sandbox Code Playgroud)
你可能想读这个.