SlideShare a Scribd company logo
1 of 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の機能充実したい
以上
質問あればどうぞ

More Related Content

What's hot

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
 

What's hot (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
 

Recently uploaded

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (11)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

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