Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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
仅对一段代码的一部分进行更正”;“过滤器”;Haskell中的快速排序 过滤器::(Ord a)=>[a]->[a] 过滤器[X:XS]=[c | c[a] 快速排序[]=[] 快速排序[x:xs]=快速排序小+++[x]+快速排序大 哪里 迷你=过滤器xs maxi=过滤器xs_Haskell_Filtering_List Comprehension - Fatal编程技术网

仅对一段代码的一部分进行更正”;“过滤器”;Haskell中的快速排序 过滤器::(Ord a)=>[a]->[a] 过滤器[X:XS]=[c | c[a] 快速排序[]=[] 快速排序[x:xs]=快速排序小+++[x]+快速排序大 哪里 迷你=过滤器xs maxi=过滤器xs

仅对一段代码的一部分进行更正”;“过滤器”;Haskell中的快速排序 过滤器::(Ord a)=>[a]->[a] 过滤器[X:XS]=[c | c[a] 快速排序[]=[] 快速排序[x:xs]=快速排序小+++[x]+快速排序大 哪里 迷你=过滤器xs maxi=过滤器xs,haskell,filtering,list-comprehension,Haskell,Filtering,List Comprehension,具有列表理解功能的函数“Filter”是否正确?我知道Haskell库中有一个内置函数“Filter”。但我尝试自己编写代码…当您在:构造函数上进行模式匹配时,使用(x:xs)[x:xs]是另一回事 标识符的第一个字母总是小写。这是Haskell的语法规则,而不仅仅是惯例 filter将类型为(a->Bool)的函数作为参数。它不需要Ord a实例 在列表理解中,生成器术语xbool)->[a]->[a] 过滤器pxs=[x | x[a]->[a] 快速排序[]=[] 快速排序(x:xs)=快速

具有列表理解功能的函数“Filter”是否正确?我知道Haskell库中有一个内置函数“Filter”。但我尝试自己编写代码…

当您在
构造函数上进行模式匹配时,使用
(x:xs)
[x:xs]
是另一回事

标识符的第一个字母总是小写。这是Haskell的语法规则,而不仅仅是惯例

filter
将类型为
(a->Bool)
的函数作为参数。它不需要
Ord a
实例

在列表理解中,生成器术语
xbool)->[a]->[a]
过滤器pxs=[x | x[a]->[a]
快速排序[]=[]
快速排序(x:xs)=快速排序小+++[x]++快速排序大
哪里
mini=过滤器(=x)xs

如果您试图重新实现内置的
过滤器
,那么您应该注意到您的类型签名是错误的——“real”
过滤器
还接受类型为
a->Bool
的函数参数。还有函数名(构造函数除外)必须以小写字母开头。不,没有名为
过滤器的内置函数,也没有任何其他以大写字符开头的函数,因为这在语法上是无效的。只有构造函数和类型可以以大写字符开头,函数名和变量都不能。除了大写问题,
[x:xs]
只匹配只包含一个非空列表的列表。此外,与快速排序相关联的函数通常称为
分区
,它更准确地反映了它的功能。感谢您的帮助!!您能告诉我(x:xs)和[x:xs]之间的区别吗?在这种情况下,我们更喜欢(x:xs)?我是否可以写其他字符,例如“x”而不是“x”,或者这是代码“filter p xs=[x | x@FengxiangHu”中的约定顺序规则,您可以在GHCi中尝试。例如,
[1:[2,3,4]
给出了
[[1,2,3,4]
,即包含一个列表(有四个元素)。而
(1:[2,3,4])
只是括号中的
1:[2,3,4]
,即它只是四个整数列表
[1,2,3,4]
[x:xs]
匹配任何包含单个元素的列表,并且该元素匹配
x:xs
。换句话说,它匹配一个非空列表,其中
x
是第一个这样的列表,
xs
是剩余的列表。99%的时间,这不是你想要的。@MathematicalArchid我在这里被搞糊涂了,或者你的同事上面的提示不太正确?:)
Filter :: (Ord a) => [a] -> [a]
 Filter [X:XS] = [[c|c<X, c<-XS ] ++ [X] ++ [c| c >X , c<-XS ]]
 quickSort :: Ord a => [a] -> [a]
 quickSort [] = []
 quickSort [x:xs] = quickSort mini ++ [x] + quickSort maxi
       where
           mini = filter xs
           maxi = filter xs   
filter :: (a -> Bool) -> [a] -> [a]
filter p xs = [x | x <- xs, p x]

quickSort :: Ord a => [a] -> [a]
quickSort [] = []
quickSort (x:xs) = quickSort mini ++ [x] ++ quickSort maxi
    where
        mini = filter (< x) xs
        maxi = filter (>= x) xs