Linux 如何修复';输入上的分析错误‘=’';当编译下面的快速排序示例时?
将下面的代码放入.hs文件,尝试通过“:t xx.hs”导入,但出现错误。。看到其他问题后,我怀疑是语法问题。希望有人能帮我解决Linux 如何修复';输入上的分析错误‘=’';当编译下面的快速排序示例时?,linux,haskell,ghci,Linux,Haskell,Ghci,将下面的代码放入.hs文件,尝试通过“:t xx.hs”导入,但出现错误。。看到其他问题后,我怀疑是语法问题。希望有人能帮我解决 quicksort :: (Ord a) => [a] -> [a] quicksort [] = [] quicksort (x:xs) = let smallerSorted = quicksort [a | a xs, a <= x] biggerSorted = quicksort [a | a xs, a > x
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
快速排序::(Ord a)=>[a]->[a]
快速排序[]=[]
快速排序(x:xs)=
设smallerSorted=quicksort[a | a xs,a x]
在smallerSorted++[x]++biggerSorted中
获取错误:
不在范围内:“a”
失败,已加载模块:无。let子句中两个声明的缩进应该匹配,如:
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
let smallerSorted = quicksort [a | a <- xs, a <= x]
biggerSorted = quicksort [a | a <- xs, a > x] -- no extra spacing
in smallerSorted ++ [x] ++ biggerSorted
请注意,您可以使用将列表拆分为两个列表,其中第一个子列表包含满足谓词的元素,而后者包含不满足谓词的元素,如:
import Data.List(partition)
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
let (smal, big) = partition (x >) xs
in quicksort smal ++ x : quicksort big
分区
函数的实现方式通常是在给定列表上只迭代一次,并且只执行一次测试。因此,这通常(稍微)比使用两个列表理解更有效,每个列表理解分别过滤给定的列表。值得补充的是,在biggerSorted
和=
之间添加额外的空间(或所需的任意多的空间)并无害处,如果希望=
符号位于同一列中。(我在网上的代码示例中看到了这一点。)正如您所说,唯一重要的事情是,让
声明的开始—变量名—排成一行。
import Data.List(partition)
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
let (smal, big) = partition (x >) xs
in quicksort smal ++ x : quicksort big