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

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: 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
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: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
 
論文紹介: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
 
新人研修 後半 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
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 

Recently uploaded (11)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: 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
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: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
 
論文紹介: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...
 
新人研修 後半 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日発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

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