为什么“;p”;对于Haskell&x2019中列表中的第一项;什么是快速排序示例?

为什么“;p”;对于Haskell&x2019中列表中的第一项;什么是快速排序示例?,haskell,Haskell,发件人: quicksort::Ord a=>[a]->[a] 快速排序[]=[] 快速排序(p:xs)=(较小的快速排序)+[p]+(较大的快速排序) 哪里 较小=过滤器(=p)xs 我的问题是“p”在这里代表哪个词?换句话说,为什么(p:xs)而不是(x:xs)?我刚刚找到了答案: (p:xs)图案位于其左侧,代表带有head元素的非空列表p(用作枢轴元素) “p”代表“pivot”。只是一个副词。如果他们像这样编写第三行quicksort(p:xs)=(quicksort lesser)

发件人:

quicksort::Ord a=>[a]->[a]
快速排序[]=[]
快速排序(p:xs)=(较小的快速排序)+[p]+(较大的快速排序)
哪里
较小=过滤器(=p)xs

我的问题是“p”在这里代表哪个词?换句话说,为什么
(p:xs)
而不是
(x:xs)

我刚刚找到了答案:

(p:xs)
图案位于其左侧,代表带有head元素的非空列表
p
(用作枢轴元素)


“p”代表“pivot”。

只是一个副词。如果他们像这样编写第三行
quicksort(p:xs)=(quicksort lesser)++(p:quicksort greater)
@DiegoNolan不,这只比原始版本向前迈进了一步,所以我希望ghc会对其进行优化。@DiegoNolan:注意,
++
是正确的。
quicksort :: Ord a => [a] -> [a]
quicksort []     = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
    where
        lesser  = filter (< p) xs
        greater = filter (>= p) xs