From 56dd09058f7eaaca0813d9ffeb6980862b6bf303 Mon Sep 17 00:00:00 2001 From: Leonardo de Moura Date: Wed, 24 May 2017 12:56:02 -0700 Subject: [PATCH] feat(library/init/data/list/basic): add auxiliary list functions --- library/init/data/list/basic.lean | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/library/init/data/list/basic.lean b/library/init/data/list/basic.lean index 36b44d167a..5f2442766b 100644 --- a/library/init/data/list/basic.lean +++ b/library/init/data/list/basic.lean @@ -65,6 +65,19 @@ protected def inter [decidable_eq α] : list α → list α → list α instance [decidable_eq α] : has_inter (list α) := ⟨list.inter⟩ +protected def erase {α} [decidable_eq α] : list α → α → list α +| [] b := [] +| (a::l) b := if a = b then l else a :: erase l b + +protected def bag_inter {α} [decidable_eq α] : list α → list α → list α +| [] _ := [] +| _ [] := [] +| (a::l₁) l₂ := if a ∈ l₂ then a :: bag_inter l₁ (l₂.erase a) else bag_inter l₁ l₂ + +protected def diff {α} [decidable_eq α] : list α → list α → list α +| l [] := l +| l₁ (a::l₂) := if a ∈ l₁ then diff (l₁.erase a) l₂ else diff l₁ l₂ + def length : list α → nat | [] := 0 | (a :: l) := length l + 1