平衡木を使ってみる

HashTable は IO 型なので難しいから平衡木。

> :m +Data.Map
> let t = empty
> t
> :t t --=> t :: Map k a
> t    --=> fromList []

要素を挿入してみる。


> let t2 = insert "key" "value" t
> let t3 = insert "1" "1234567890" t2
> t3
fromList [("1","1234567890"),("key","value")]

> let t4 = insert "k" "fuga" t3
> t4
fromList [("1","1234567890"),("k","fuga"),("key","value")]

検索してみる。Prelude.lookup もあるので区別が必要。


> Data.Map.lookup "k" t4
Just "fuga"

! による要素へのアクセス。

 
> t4 ! "1"
"1234567890"
> t4 ! "k"
"fuga"

adjust 関数による修正。第1引数の関数で、修正、置き換えが出来る。


> adjust ("new " ++) "k" t4
fromList [("1","1234567890"),("k","new fuga"),("key","value")]

> adjust (\x ->"qqq") "k" t4
fromList [("1","1234567890"),("k","qqq"),("key","value")]

> adjust (\_ ->"++++++++++++++++") "k" t4
fromList [("1","1234567890"),("k","++++++++++++++++"),("key","value")]

> let t5 = adjust (\_ ->"++++++++++++++++") "k" t4
> t5
fromList [("1","1234567890"),("k","++++++++++++++++"),
("key","value")]

> let t6 = adjust ("add string "++) "key" t5
Prelude Data.Map> t6
fromList [("1","1234567890"),("k","++++++++++++++++"),
("key","add string value")]

delete 関数で削除。


> let t7 = delete "k" t6
> t7
fromList [("1","1234567890"),("key","add string value")]