35 lines
654 B
Text
35 lines
654 B
Text
import Lean.Data.PersistentHashSet
|
||
|
||
open Lean
|
||
|
||
def sum (s : PHashSet Nat) : Nat := Id.run do
|
||
let mut r := 0
|
||
for a in s do
|
||
r := r + a
|
||
return r
|
||
|
||
def sumIf (s : PHashSet Nat) (p : Nat → Bool) : Nat := Id.run do
|
||
let mut r := 0
|
||
for a in s do
|
||
unless p a do
|
||
continue
|
||
r := r + a
|
||
return r
|
||
|
||
def mk [Hashable α] [BEq α] (f : Nat → α) (n : Nat) : PHashSet α := Id.run do
|
||
let mut s := {}
|
||
for i in [:n] do
|
||
s := s.insert (f i)
|
||
return s
|
||
|
||
/-- info: 45 -/
|
||
#guard_msgs in
|
||
#eval sum (mk id 10)
|
||
|
||
/-- info: 9900 -/
|
||
#guard_msgs in
|
||
#eval sum (mk (2*·) 100)
|
||
|
||
/-- info: 2450 -/
|
||
#guard_msgs in
|
||
#eval sumIf (mk id 100) (· % 2 == 0)
|