feat(library/init/data/list/qsort): add temp qsort as meta definition

This commit is contained in:
Leonardo de Moura 2017-02-17 20:58:17 -08:00
parent 7eef501ae1
commit 4f3fd2cba6
2 changed files with 24 additions and 1 deletions

View file

@ -4,4 +4,4 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Leonardo de Moura
-/
prelude
import init.data.list.basic init.data.list.instances init.data.list.lemmas
import init.data.list.basic init.data.list.instances init.data.list.lemmas init.data.list.qsort

View file

@ -0,0 +1,23 @@
/-
Copyright (c) 2017 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Author: Leonardo de Moura
-/
prelude
import init.data.list.basic
namespace list
/- TODO(Leo): remove meta as soon as equation compiler has support for well founded recursion.
This is based on the minimalist Haskell "quicksort".
Remark: this is *not* really quicksort since it doesn't partition the elements in-place -/
meta def qsort {α} (lt : αα → bool) : list α → list α
| [] := []
| (h::t) :=
let small := filter (λ x, lt h x = ff) t,
large := filter (λ x, lt h x = tt) t
in qsort small ++ h :: qsort large
end list