SlideShare una empresa de Scribd logo
1 de 21
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, OCaml, シェルスクリプトが好き
● CIMの開発してます
● いちおーCL21のコミッタ
今日の内容
➔ 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-sequence
– abstract-hash-table
今日の内容
➔ 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-sequenceのテストケースを流用してテ
スト
● テストケース77
今日の内容
➔ 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-hash-mapを継承
● abstract-sequenceも継承出来る?
その他のデータ構造(実装予定)
● priority-queue
– ヒープのkey-value版
● deque
– 双方向連結リスト
– queueが可哀想なことになっちゃうなー
● (ordered-)set
– mapのkey-valueじゃない版
● range
– 主にmapの範囲クエリ投げる用
● Union-Find木
– 競技プログラミング専用?必要ある?
感想
● abstract-sequenceで実装するメソッド多い
– 逆順でイテレートとか明かに相性が悪いのもある
● やっぱpushとpopの挙動変更したい
– heapもabstract-sequenceを実装したい
– あるいはabstract-collection?
● テストの自動生成あっても良いかも
● abstract-hashの機能充実したい
以上
質問あればどうぞ

Más contenido relacionado

La actualidad más candente

BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話Katsunori Kanda
 
可視化周辺の進化がヤヴァイ~rChartsを中心として~
可視化周辺の進化がヤヴァイ~rChartsを中心として~可視化周辺の進化がヤヴァイ~rChartsを中心として~
可視化周辺の進化がヤヴァイ~rChartsを中心として~Nagi Teramo
 
データベース実践入門読書会スペシャル #nseg
データベース実践入門読書会スペシャル #nsegデータベース実践入門読書会スペシャル #nseg
データベース実践入門読書会スペシャル #nsegko ty
 
Rubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなしRubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなしMasaki Matsushita
 
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~genroku
 
本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能mametter
 
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
CouchDB+OpenSocial - OSC 2009/Fall TokyoCouchDB+OpenSocial - OSC 2009/Fall Tokyo
CouchDB+OpenSocial - OSC 2009/Fall TokyoYohei Sasaki
 
20180620 pgx user_group#8
20180620 pgx user_group#820180620 pgx user_group#8
20180620 pgx user_group#8Mio Takei
 

La actualidad más candente (11)

Mishimasyk141025
Mishimasyk141025Mishimasyk141025
Mishimasyk141025
 
Real world lisp
Real world lispReal world lisp
Real world lisp
 
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
 
可視化周辺の進化がヤヴァイ~rChartsを中心として~
可視化周辺の進化がヤヴァイ~rChartsを中心として~可視化周辺の進化がヤヴァイ~rChartsを中心として~
可視化周辺の進化がヤヴァイ~rChartsを中心として~
 
データベース実践入門読書会スペシャル #nseg
データベース実践入門読書会スペシャル #nsegデータベース実践入門読書会スペシャル #nseg
データベース実践入門読書会スペシャル #nseg
 
Rubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなしRubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなし
 
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
 
本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能
 
ChEMBLを使おう
ChEMBLを使おうChEMBLを使おう
ChEMBLを使おう
 
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
CouchDB+OpenSocial - OSC 2009/Fall TokyoCouchDB+OpenSocial - OSC 2009/Fall Tokyo
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
 
20180620 pgx user_group#8
20180620 pgx user_group#820180620 pgx user_group#8
20180620 pgx user_group#8
 

Último

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Último (8)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

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