我有一个简单的f#快速排序功能,定义如下:
let rec qsort(xs:List<int>) =
let smaller = xs |> List.filter(fun e -> e < xs.Head)
let larger = xs |> List.filter(fun e -> e > xs.Head)
match xs with
| [] -> []
| _ -> qsort(smaller)@[xs.Head]@qsort(larger)
Run Code Online (Sandbox Code Playgroud)
在f#中是否有一种方法可以像Haskell一样编写它:
qsort :: [Int] -> [Int]
qsort [] = []
qsort (x:xs) =
qsort smaller ++ [x] ++ qsort larger
where
smaller = [a | a <- xs, a <= x]
larger = [b | b <- xs, b >= x]
Run Code Online (Sandbox Code Playgroud)
我知道f#算法缺少<=和> …