Your SlideShare is downloading. ×
0
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

3,644

Published on

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

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,644
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
2
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×