Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何修复';输入上的分析错误‘=’';当编译下面的快速排序示例时?_Linux_Haskell_Ghci - Fatal编程技术网

Linux 如何修复';输入上的分析错误‘=’';当编译下面的快速排序示例时?

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

将下面的代码放入.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]
  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