発表場所: | Scalaz勉強会 |
---|---|
資料のライセンス: | CC-BY-SA 4.0 |
- なかやん・ゆーき / ぺんぎん / もみあげ
- @pocketberserker / id:pocketberserker
- 通りすがりの社会人2年目
- Microsoft MVP for F# (2013/04 ~ 2015/03)
- たぶん Scala ビギナー
- 日課: Scalaz , GHC 周辺ライブラリの F# への移植実験
ゆるくデータ構造を見ていきましょう
- 計算機科学でデータの集まりを効率よく扱うためのもの
- immutableなものもあるよ
7.1.0 RC1 時点で deprecated でないもの(見落としあるかも)
- Cord
- DList (Difference lists)
- Diev (Discrete Interval Encoding Tree)
- FingerTree (2-3 finger tree)
- Heap
- ImmutableArray
- ==>> (HaskellのData.Mapのことらしい)
- NonEmptyList
- Tree (Rose Tree)
- Zipper
- https://github.com/scalaz/scalaz/blob/3bc05e3cef48abd6aec5f886e871260056684be4/core/src/main/scala/scalaz/Cord.scala
- String (紐) の強化版
- 文字列同士の結合やコピー、substring が高速
- 似たデータ構造として Rope があるが、Scalaz では 7.1.0 で deprecated
- 実装に FingerTree を利用
- Show に利用されている
- https://github.com/scalaz/scalaz/blob/3bc05e3cef48abd6aec5f886e871260056684be4/core/src/main/scala/scalaz/DList.scala
- リストの append 操作が O(1)
- 実装に Trampoline を利用
昨日存在を知ったので飛ばします
- https://github.com/scalaz/scalaz/blob/3bc05e3cef48abd6aec5f886e871260056684be4/core/src/main/scala/scalaz/FingerTree.scala
- sequence の一種
- 連結や分割がならし計算量で O(log N)
- なぜか wikipedia の解説が充実している
- 論文公開が2006年なのでわりと新しめ
- 1000行以上ある
- https://github.com/scalaz/scalaz/blob/3bc05e3cef48abd6aec5f886e871260056684be4/core/src/main/scala/scalaz/FingerTree.scala
- bootstrapped skew binomial heaps をベースにしている
- https://github.com/ekmett/heaps/ の移植らしい
- https://github.com/scalaz/scalaz/blob/3bc05e3cef48abd6aec5f886e871260056684be4/core/src/main/scala/scalaz/Map.scala
- HaskellのData.Map
- 平衡二分木ベース
- Order に依存
- コードが長い
- https://github.com/scalaz/scalaz/blob/3bc05e3cef48abd6aec5f886e871260056684be4/core/src/main/scala/scalaz/NonEmptyList.scala
- 空でないことが保障されているリスト的なもの
- https://github.com/scalaz/scalaz/blob/3bc05e3cef48abd6aec5f886e871260056684be4/core/src/main/scala/scalaz/Tree.scala
- 多分木
- 関数プログラミング入門 Haskellで学ぶ原理と技法 に解説がある
‐ 要素の更新を簡単に - データ構造をたどる操作を効率的に - すごいHaskell楽しく学ぼう にちょっとした説明があったような
- Foldable
- Semigroup
- Monoid
- Reducer
- 性能評価されていないらしい?
- Purely Functional Data Structures(Chris Okasaki - 1998)
- 関数プログラミング入門 Haskellで学ぶ原理と技法(オーム社)
- すごいHaskell楽しく学ぼう(オーム社)
‐ 一部データ構造のコメントに記載されている論文
- Iteratee を調べていたら見つけた
- Scala 基礎勉強会でさらに興味を持った
ひたすら移植(写経)してみる