Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
CL21でデータ構造を実装してみよ
うとした
Lisp Meet Up Presented by Shibuya.lisp #16
2014-04-22
#lispmeetup
κeen(@blackenedgold)
自己紹介
● Twitter: κeen(@blackenedgold)
● Github: KeenS
● ブログ: een Happy Hac ing Blogκ の κ
● 東大数学科の4年生
● …就活中
● Lisp, Ruby, O...
今日の内容
➔ CL21について
➔ CL21のabstract-sequence
➔ CL21のabstract-hash-table
➔ cl21-data-collections
➔ queue
➔ heap
➔ map
CL21って?
CL21って?
● 神託によって作られた神の言語
● Github: fukamachi/cl21
● 既存の関数をユーザーフレンドリーに書き換え
– eltとかgetfとか
● リードテーブルも書き換え
– {:hoge foo}でハッシュと...
なんでCL21で実装したの?
● 今後にシフトしそう(少くとも自分は)
● 使用例作りたかった
● ユーザーに拡張の余地を残してある
– MOP
– read-table
– 一部の関数をメソッドとして再定義
– abstract-sequen...
今日の内容
➔ CL21について
➔ CL21のabstract-sequence
➔ CL21のabstract-hash-table
➔ cl21-data-collections
➔ queue
➔ heap
➔ map
abstract-sequence
● シーケンスを抽象化したもの
● ほぼ他の言語の抽象クラスと同じイメージ
1.abstract-sequenceを継承したクラスを実装
2.いくつかのメソッドを実装する(結構いっぱ
い)
3.いろいろなメソ...
今日の内容
➔ CL21について
➔ CL21のabstract-sequence
➔ CL21のabstract-hash-table
➔ cl21-data-collections
➔ queue
➔ heap
➔ map
abstract-hash-table
● ハッシュテーブルを抽象化したもの
● abstract-hash-tableとほぼ同じ
1.abstract-sequenceを継承したクラスを実装
2.いくつかのメソッドを実装する(少ない)
3.ユ...
今日の内容
➔ CL21について
➔ CL21のabstract-sequence
➔ CL21のabstract-hash-table
➔ cl21-data-collections
➔ queue
➔ heap
➔ map
cl21-data-collections
● Github KeenS/cl21-data-collectionに置く予定
● 通称蟻本を参考に実装
● cl21のstdlibに入るといいなー
● まだ全然実装終わってない
今日の内容
➔ CL21について
➔ CL21のabstract-sequence
➔ CL21のabstract-hash-table
➔ cl21-data-collections
➔ queue
➔ heap
➔ map
queue
● FIFOのシーケンス
– push-back, popがO(1)
● abstract-sequenceを実装
● 内部的にはリストで保持。一番最後のコンスを持
つことでpush-backをO(1)にする
● abstract-...
今日の内容
➔ CL21について
➔ CL21のabstract-sequence
➔ CL21のabstract-hash-table
➔ cl21-data-collections
➔ queue
➔ heap
➔ map
heap
● 最小(最大)値をルートに持つ2分木
● 最小値の参照はO(1)
● 値の追加、値(最小値)の取り出しはO(log n)
● abstract-sequenceは実装してない
– 最小値以外は順序がないためpush-backとか無理...
今日の内容
➔ CL21について
➔ CL21のabstract-sequence
➔ CL21のabstract-hash-table
➔ cl21-data-collections
➔ queue
➔ heap
➔ map
map
● 平衡二分木
– OCamlのMapを写経したため、具体的な名前は不明
● 自然と値がソートされて保持される
● 値の参照、追加、削除がO(log n)
● 他にも範囲で取得とか便利なクエリも可能(未実
装)
● abstract-h...
その他のデータ構造(実装予定)
● priority-queue
– ヒープのkey-value版
● deque
– 双方向連結リスト
– queueが可哀想なことになっちゃうなー
● (ordered-)set
– mapのkey-valu...
感想
● abstract-sequenceで実装するメソッド多い
– 逆順でイテレートとか明かに相性が悪いのもある
● やっぱpushとpopの挙動変更したい
– heapもabstract-sequenceを実装したい
– あるいはabst...
以上
質問あればどうぞ
Upcoming SlideShare
Loading in …5
×

CL21で色々なデータ構造を実装してみようとした

Lisp Meet Up Present by Shibuya.lisp #16での発表資料です。

  • Login to see the comments

CL21で色々なデータ構造を実装してみようとした

  1. 1. CL21でデータ構造を実装してみよ うとした Lisp Meet Up Presented by Shibuya.lisp #16 2014-04-22 #lispmeetup κeen(@blackenedgold)
  2. 2. 自己紹介 ● Twitter: κeen(@blackenedgold) ● Github: KeenS ● ブログ: een Happy Hac ing Blogκ の κ ● 東大数学科の4年生 ● …就活中 ● Lisp, Ruby, OCaml, シェルスクリプトが好き ● CIMの開発してます ● いちおーCL21のコミッタ
  3. 3. 今日の内容 ➔ CL21について ➔ CL21のabstract-sequence ➔ CL21のabstract-hash-table ➔ cl21-data-collections ➔ queue ➔ heap ➔ map
  4. 4. CL21って?
  5. 5. CL21って? ● 神託によって作られた神の言語 ● Github: fukamachi/cl21 ● 既存の関数をユーザーフレンドリーに書き換え – eltとかgetfとか ● リードテーブルも書き換え – {:hoge foo}でハッシュとか – 要はオレオレリテラル。 ● よく使うライブラリは標準バンドル – 正規表現 – プロセス など
  6. 6. なんでCL21で実装したの? ● 今後にシフトしそう(少くとも自分は) ● 使用例作りたかった ● ユーザーに拡張の余地を残してある – MOP – read-table – 一部の関数をメソッドとして再定義 – abstract-sequence – abstract-hash-table
  7. 7. 今日の内容 ➔ CL21について ➔ CL21のabstract-sequence ➔ CL21のabstract-hash-table ➔ cl21-data-collections ➔ queue ➔ heap ➔ map
  8. 8. abstract-sequence ● シーケンスを抽象化したもの ● ほぼ他の言語の抽象クラスと同じイメージ 1.abstract-sequenceを継承したクラスを実装 2.いくつかのメソッドを実装する(結構いっぱ い) 3.いろいろなメソッドが自動的に使えるように なる
  9. 9. 今日の内容 ➔ CL21について ➔ CL21のabstract-sequence ➔ CL21のabstract-hash-table ➔ cl21-data-collections ➔ queue ➔ heap ➔ map
  10. 10. abstract-hash-table ● ハッシュテーブルを抽象化したもの ● abstract-hash-tableとほぼ同じ 1.abstract-sequenceを継承したクラスを実装 2.いくつかのメソッドを実装する(少ない) 3.ユーザーが透過的に使えるようになる まだ開発途上な感じ
  11. 11. 今日の内容 ➔ CL21について ➔ CL21のabstract-sequence ➔ CL21のabstract-hash-table ➔ cl21-data-collections ➔ queue ➔ heap ➔ map
  12. 12. cl21-data-collections ● Github KeenS/cl21-data-collectionに置く予定 ● 通称蟻本を参考に実装 ● cl21のstdlibに入るといいなー ● まだ全然実装終わってない
  13. 13. 今日の内容 ➔ CL21について ➔ CL21のabstract-sequence ➔ CL21のabstract-hash-table ➔ cl21-data-collections ➔ queue ➔ heap ➔ map
  14. 14. queue ● FIFOのシーケンス – push-back, popがO(1) ● abstract-sequenceを実装 ● 内部的にはリストで保持。一番最後のコンスを持 つことでpush-backをO(1)にする ● abstract-sequenceのテストケースを流用してテ スト ● テストケース77
  15. 15. 今日の内容 ➔ CL21について ➔ CL21のabstract-sequence ➔ CL21のabstract-hash-table ➔ cl21-data-collections ➔ queue ➔ heap ➔ map
  16. 16. heap ● 最小(最大)値をルートに持つ2分木 ● 最小値の参照はO(1) ● 値の追加、値(最小値)の取り出しはO(log n) ● abstract-sequenceは実装してない – 最小値以外は順序がないためpush-backとか無理 ● 内部は木ではなく配列で保持
  17. 17. 今日の内容 ➔ CL21について ➔ CL21のabstract-sequence ➔ CL21のabstract-hash-table ➔ cl21-data-collections ➔ queue ➔ heap ➔ map
  18. 18. map ● 平衡二分木 – OCamlのMapを写経したため、具体的な名前は不明 ● 自然と値がソートされて保持される ● 値の参照、追加、削除がO(log n) ● 他にも範囲で取得とか便利なクエリも可能(未実 装) ● abstract-hash-mapを継承 ● abstract-sequenceも継承出来る?
  19. 19. その他のデータ構造(実装予定) ● priority-queue – ヒープのkey-value版 ● deque – 双方向連結リスト – queueが可哀想なことになっちゃうなー ● (ordered-)set – mapのkey-valueじゃない版 ● range – 主にmapの範囲クエリ投げる用 ● Union-Find木 – 競技プログラミング専用?必要ある?
  20. 20. 感想 ● abstract-sequenceで実装するメソッド多い – 逆順でイテレートとか明かに相性が悪いのもある ● やっぱpushとpopの挙動変更したい – heapもabstract-sequenceを実装したい – あるいはabstract-collection? ● テストの自動生成あっても良いかも ● abstract-hashの機能充実したい
  21. 21. 以上 質問あればどうぞ

×