SlideShare a Scribd company logo
1 of 93
Download to read offline
データ構造
with Haskell
目次
● Stack
● Queue
●
Deque
目次
● Stack
● Queue
●
Deque
● 全部配列を使えば一瞬じゃないか!
いいかげんにしろ!
残念ながら
配列なんて無いよ
Haskellのデータ構造
● 配列は一応あるよ
– ただし代入に O(N) かかる
Haskellのデータ構造
● リストというのを使います
● 次の操作が可能
– 先頭に値を追加 O(1)
– 先頭から削除 O(1)
– n番目にアクセス O(n)
● 厳密にはちょっと違うけどだいたいあってる
Haskellのリスト
●
[3, 1, 4, 1, 5] –-リストの例
●
追加
– 9 : [3, 1, 4, 1, 5] → [9, 3, 1, 4, 1, 5]
●
先頭を得る
– head [3, 1, 4, 1, 5] → 3
●
先頭以外を得る
– tail [3, 1, 4, 1, 5] → [1, 4, 1, 5]
– tail [1] → [ ] –- 空のリスト
Haskellのリスト
● 先頭にくっつける (:)
● 先頭を参照する head
●
先頭以外を参照する tail
● これらは以降たくさん出てくるのでよく覚えて
いてね
1つめのデータ構造
Stack
Stack
● 次の操作に対応したデータ構造
– 列の先頭に値を追加  (push)
– 列の先頭から値を取り出す (pop)
Stack:図示
● 空のStackがあるじゃろ
– 左側が先頭
Stack:図示
● push(4)
4
Stack:図示
● push(4), push(1)
41
Stack:図示
● push(4), push(1), push(1)
411
Stack:図示
● push(4), push(1), push(1), pop()
41
1
Stack:図示
● push(4), push(1), push(1), pop(), push(5)
4155
Stack
● 次の操作に対応したデータ構造
– 列の先頭に値を追加  (push)
– 列の先頭から値を取り出す (pop)
Stack
● 次の操作に対応したデータ構造
– 列の先頭に値を追加  (push)
– 列の先頭から値を取り出す (pop)
● すごい既視感
Haskellのデータ構造 (再掲)
● リストというのを使います
● 次の操作が可能
– 先頭に値を追加 O(1)
– 先頭から削除 O(1)
– n番目にアクセス O(n)
● 厳密にはちょっと違うけどだいたいあってる
Haskellのデータ構造 (再掲)
● リストというのを使います
● 次の操作が可能
– 先頭に値を追加 O(1)
– 先頭から削除 O(1)
– n番目にアクセス O(n)
● 厳密にはちょっと違うけどだいたいあってる
Stack
● スタック
● リストをそのまま使える
– やったぜ
Stack: 実装
(ソースコードをここに書く)
(説明をここに書く)
Stack: 実装
Data Stack a = S [a]
Stack型の定義
Stack: 実装
Data Stack a = S [a]
push (S xs) x = S (x:xs)
pushの定義
Stack: 実装
Data Stack a = S [a]
push (S xs) x = S (x:xs)
pop (x:xs) = (x, S xs)
popの定義
Stack: 実装
Data Stack a = S [a]
push (S xs) x = S (x:xs)
pop (x:xs) = (x, S xs)
空のStackをpopしないことは
良心にまかせる
Stack: 実装
Data Stack a = S [a]
push (S xs) x = S (x:xs)
pop (x:xs) = (x, S xs)
完成
1つめのデータ構造
Queue
Queue
● 次の操作に対応したデータ構造
– 列の先頭に値を追加  (push)
– 列の末尾から値を取り出す (pop)
Queue: 図示
● 空のQueueがあるじゃろ
– 左側から入って、右側から出る
Queue: 図示
● push(3)
3
Queue: 図示
● push(3), push(7)
37
Queue: 図示
● push(3), push(7), push(2)
372
Queue: 図示
● push(3), push(7), push(2), pop()
3
72
Queue: 図示
● push(3), push(7), push(2), pop()
72
Queue: 図示
● push(3), push(7), push(2), pop(), push(9)
729
Queue: 図示
● push(3), push(7), push(2), pop(), push(9)
pop()
7
29
Queue
● 次の操作に対応したデータ構造
– 列の先頭に値を追加  (push)
– 列の末尾から値を取り出す (pop)
Queue
● 次の操作に対応したデータ構造
– 列の先頭に値を追加  (push)
– 列の末尾から値を取り出す (pop)
– リストの末尾の操作は厄介
Queue
● 次の操作に対応したデータ構造
– 列の先頭に値を追加  (push)
– 列の末尾から値を取り出す (pop)
– リストの末尾の操作は厄介
– しかしデータ構造の申し子である皆さんな
ら対処法をすぐに思いつくはず
有名なことわざ
QueueはStack2つで作れる
Queue: 図示
● 空のQueueの下に2つのStackがあるじゃろ
Queue: 図示
● push(3)
3
3
Queue: 図示
● push(3), push(5)
3
3
5
5
Queue: 図示
● push(3), push(5), push(1)
3
35
5
1
1
Queue: 図示
● push(3), push(5), push(1), pop()
3
35
5
1
1
Queue: 図示
● push(3), push(5), push(1), pop()
● pop時右側が空だったらエイヤッする
3
35
5
1
1
Queue: 図示
● push(3), push(5), push(1), pop()
3
35
5
1
1
Queue: 図示
● push(3), push(5), push(1), pop()
5
5
1
1
Queue: 図示
● push(3), push(5), push(1), pop(), push(2)
5
5
1
1
2
2
Queue: 図示
● push(3), push(5), push(1), pop(), push(2),
pop()
5
5
1
1
2
2
Queue(Stack×2)
● Stackはさっき実装したばかりだしやるだけ
じゃん!
● 一番ややこしいのはpopするときに右側の
Stackが空だった時
Queue(Stack×2)
● Stackはさっき実装したばかりだしやるだけ
じゃん!
● 一番ややこしいのはpopするときに右側の
Stackが空だった時
351
Queue(Stack×2)
● Stackはさっき実装したばかりだしやるだけ
じゃん!
● 一番ややこしいのはpopするときに右側の
Stackが空だった時
351
エイヤッ
Queue(Stack×2)
● Stackはさっき実装したばかりだしやるだけ
じゃん!
● 一番ややこしいのはpopするときに右側の
Stackが空だった時
●
Stackがただのリストであったことを思い出す
と、エイヤッはただのリスト反転
– 標準で reverseという関数がある
Queue: 実装
(実装をここに書く)
(説明をここに書く)
Queue: 実装
Queue a = Q [a] [a]
Queueの型を定義 リスト2つ
Queue: 実装
Queue a = Q [a] [a]
push (Q xs ys) x = Q (x:xs) ys
push の実装 (Stackと同様)
Queue: 実装
Queue a = Q [a] [a]
push (Q xs ys) x = Q (x:xs) ys
pop (Q xs y:ys) = (y (Q xs ys))
右側が空じゃない時のpop
Queue: 実装
Queue a = Q [a] [a]
push (Q xs ys) x = Q (x:xs) ys
pop (Q xs y:ys) = (y (Q xs ys))
pop (Q xs []) =
pop(Q [] (reverse xs))
右側が空の時のpop
3つめのデータ構造
Deque
Deque
● 次の操作に対応したデータ構造
– 列の先頭に値を追加  (pushF)
– 列の末尾に値を追加  (pushB)
– 列の先頭から値を取り出す (popF)
– 列の末尾から値を取り出す (popB)
Deque: 図示
● ここに空のDequeがあるじゃろ
– 左が先頭(Front), 右が末尾 (Back)
Deque: 図示
● pushF(3)
3
Deque: 図示
● pushF(3), pushB(4)
3 4
Deque: 図示
● pushF(3), pushB(4), pushF(5)
3 45
Deque: 図示
● pushF(3), pushB(4), pushF(5), popB()
3
4
5
4
Deque: 図示
● pushF(3), pushB(4), pushF(5), popB()
35
Deque: 図示
● pushF(3), pushB(4), pushF(5), popB(), popF()
3
5
Deque: 図示
● pushF(3), pushB(4), pushF(5), popB(), popF()
3
Deque: 図示
● pushF(3), pushB(4), pushF(5), popB(), popF()
pushB(4)
3 4
Deque: 図示
● pushF(3), pushB(4), pushF(5), popB(), popF()
pushB(4), pushF(3)
3 433
Deque
● 次の操作に対応したデータ構造
– 列の先頭に値を追加  (pushF)
– 列の末尾に値を追加  (pushB)
– 列の先頭から値を取り出す (popF)
– 列の末尾から値を取り出す (popB)
Deque
● 次の操作に対応したデータ構造
– 列の先頭に値を追加  (pushF)
– 列の末尾に値を追加  (pushB)
– 列の先頭から値を取り出す (popF)
– 列の末尾から値を取り出す (popB)
Queue
● 次の操作に対応したデータ構造
– 列の先頭に値を追加  (pushF)
– 列の末尾に値を追加  (pushB)
– 列の先頭から値を取り出す (popF)
– 列の末尾から値を取り出す (popB)
有名なことわざ
DequeはStack2つで作れる
Deque(Stack×2): 図示
● 空のDequeの下にStackが2つあるじゃろ
– 左が先頭(Front), 右が末尾 (Back)
432
Deque(Stack×2): 図示
● pushF(1), pushF(2), pushF(3), pushF(4)
4321
1
432
Deque(Stack×2): 図示
● pushF(1), pushF(2), pushF(3), pushF(4)
popB()
4
321
1
32
Deque(Stack×2): 図示
● pushF(1), pushF(2), pushF(3), pushF(4)
popB()
4
321
1
エイヤッ
4
32
Deque(Stack×2): 図示
● pushF(1), pushF(2), pushF(3), pushF(4)
popB()
4
321
1
4
32
Deque(Stack×2): 図示
● pushF(1), pushF(2), pushF(3), pushF(4)
popB()
321
1
Deque(Stack×2)
● Stackはさっき実装したばかりだしやるだけ
じゃん!(デジャヴ)
● 一番ややこしいのはpopするときにしたい方
のStackが空だった時 (デジャヴ)
4321
321 4
Deque(Stack×2)
● Stackはさっき実装したばかりだしやるだけ
じゃん!(デジャヴ)
● 一番ややこしいのはpopするときにしたい方
のStackが空だった時 (デジャヴ)
エイヤッ
Deque(Stack×2)
●
Stackはさっき実装したばかりだしやるだけじゃん!
(デジャヴ)
●
一番ややこしいのはpopするときにしたい方のStack
が空だった時 (デジャヴ)
●
エイヤッは空じゃないStackの中身を半分ずつにわけ
る操作
– リストの最初 k 個分をとりだす take
– リストの最初 k 個を除いたリストを得る drop
– これらを使えば便利
Deque(Stack×2)
● Stackはさっき実装したばかりだしやるだけ
じゃん!(デジャヴ)
● 一番ややこしいのはpopするときにしたい方
のStackが空だった時 (デジャヴ)
●
エイヤッは空じゃないStackの中身を半分ずつに
わける操作
– 空じゃない方の奥側半分を逆転して空の
方につっこむ
–
Deque: 実装
(実装をここに書く)
(説明をここに書く)
Deque: 実装
Deque a = D [a] [a]
pushF (D xs ys) x = D (x:xs) ys
pushB (D xs ys) y = D xs (y:ys)
pushFとpushB (簡単)
Deque: 実装
Deque a = D [a] [a]
popF (D x:xs ys) = (x, (D xs ys))
左側が空じゃない時のpopF
Deque: 実装
Deque a = D [a] [a]
popF (D x:xs ys) = (x, (D xs ys))
popF (D [] ys) = popF (D lh rh)
where lh = take h ys
rh = reverse (drop h ys)
h = (length ys) `div` 2
左側が空の時のpopF
Deque: 実装
Deque a = D [a] [a]
popB (D xs y:ys) = (y, (D xs ys))
popB (D xs []) = popB (D lh rh)
where lh = reverse (drop h xs)
rh = take h xs
h = (length xs) `div` 2
popBも同様
クリックしてタイトルを挿入!
やったぜ
サンプルコード
● サンプルコードはこちら
● https://github.com/catupper/JOISS2015/blob/master/Queue
/Deque.hs

More Related Content

What's hot

【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたいTakuji Tahara
 
Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)Yoshitaka Ushiku
 
4 データ間の距離と類似度
4 データ間の距離と類似度4 データ間の距離と類似度
4 データ間の距離と類似度Seiichi Uchida
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界Preferred Networks
 
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII
 
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリングmlm_kansai
 
スパースモデリング入門
スパースモデリング入門スパースモデリング入門
スパースモデリング入門Hideo Terada
 
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Yusuke Fujimoto
 
三次元表現まとめ(深層学習を中心に)
三次元表現まとめ(深層学習を中心に)三次元表現まとめ(深層学習を中心に)
三次元表現まとめ(深層学習を中心に)Tomohiro Motoda
 
物体検出の歴史(R-CNNからSSD・YOLOまで)
物体検出の歴史(R-CNNからSSD・YOLOまで)物体検出の歴史(R-CNNからSSD・YOLOまで)
物体検出の歴史(R-CNNからSSD・YOLOまで)HironoriKanazawa
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~Takuya Akiba
 
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)narumikanno0918
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】MOCKS | Yuta Morishige
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうRyuji Tsutsui
 
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】Hiroyuki Muto
 
Sliced Wasserstein Distance for Learning Gaussian Mixture Models
Sliced Wasserstein Distance for Learning Gaussian Mixture ModelsSliced Wasserstein Distance for Learning Gaussian Mixture Models
Sliced Wasserstein Distance for Learning Gaussian Mixture ModelsFujimoto Keisuke
 
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしないPyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしないToshihiro Kamishima
 

What's hot (20)

【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
 
Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)
 
4 データ間の距離と類似度
4 データ間の距離と類似度4 データ間の距離と類似度
4 データ間の距離と類似度
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
 
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
 
スパースモデリング入門
スパースモデリング入門スパースモデリング入門
スパースモデリング入門
 
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
 
三次元表現まとめ(深層学習を中心に)
三次元表現まとめ(深層学習を中心に)三次元表現まとめ(深層学習を中心に)
三次元表現まとめ(深層学習を中心に)
 
Group normalization
Group normalizationGroup normalization
Group normalization
 
物体検出の歴史(R-CNNからSSD・YOLOまで)
物体検出の歴史(R-CNNからSSD・YOLOまで)物体検出の歴史(R-CNNからSSD・YOLOまで)
物体検出の歴史(R-CNNからSSD・YOLOまで)
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
 
Project Facilitation
Project FacilitationProject Facilitation
Project Facilitation
 
Sliced Wasserstein Distance for Learning Gaussian Mixture Models
Sliced Wasserstein Distance for Learning Gaussian Mixture ModelsSliced Wasserstein Distance for Learning Gaussian Mixture Models
Sliced Wasserstein Distance for Learning Gaussian Mixture Models
 
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしないPyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
 

Similar to Deque with Haskel

アルゴリズムとデータ構造4
アルゴリズムとデータ構造4アルゴリズムとデータ構造4
アルゴリズムとデータ構造4Kenta Hattori
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
解説#74 連結リスト
解説#74 連結リスト解説#74 連結リスト
解説#74 連結リストRuo Ando
 
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリデータサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリSatoshi Kitajima
 
Python勉強会3-コレクションとファイル
Python勉強会3-コレクションとファイルPython勉強会3-コレクションとファイル
Python勉強会3-コレクションとファイル理 小林
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psqlToshi Harada
 

Similar to Deque with Haskel (7)

アルゴリズムとデータ構造4
アルゴリズムとデータ構造4アルゴリズムとデータ構造4
アルゴリズムとデータ構造4
 
Find(1)
Find(1)Find(1)
Find(1)
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
解説#74 連結リスト
解説#74 連結リスト解説#74 連結リスト
解説#74 連結リスト
 
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリデータサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリ
 
Python勉強会3-コレクションとファイル
Python勉強会3-コレクションとファイルPython勉強会3-コレクションとファイル
Python勉強会3-コレクションとファイル
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psql
 

More from Ken Ogura

More from Ken Ogura (20)

Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackAmortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 Stack
 
Trianguler
TriangulerTrianguler
Trianguler
 
Npc april fool2014
Npc april fool2014Npc april fool2014
Npc april fool2014
 
計算量
計算量計算量
計算量
 
辺彩色
辺彩色辺彩色
辺彩色
 
かけざん
かけざんかけざん
かけざん
 
人間対Pc2
人間対Pc2人間対Pc2
人間対Pc2
 
PC解体
PC解体PC解体
PC解体
 
ハッキング実演
ハッキング実演ハッキング実演
ハッキング実演
 
Shio dtm
Shio dtmShio dtm
Shio dtm
 
Cをやりましょう
CをやりましょうCをやりましょう
Cをやりましょう
 
April2013
April2013April2013
April2013
 
April2013
April2013April2013
April2013
 
Mage
MageMage
Mage
 
Imo
ImoImo
Imo
 
Hairetu2
Hairetu2Hairetu2
Hairetu2
 
Moon
MoonMoon
Moon
 
Jissou
JissouJissou
Jissou
 
Lunch
LunchLunch
Lunch
 
Divisor
DivisorDivisor
Divisor
 

Deque with Haskel