Rubyで関数型プログラミン
グをするためのgemを作った
@gam0022
自己紹介

Twitter: @gam0022
情報科学類3年(coins11)
大五郎botの飼い主
COJT SWコース
Ruby と C#
けっこうなんでも書きます
Rubyで関数型プログラミング
一般的な言語がループで繰り返しを表現するのに対して

再帰を用いて繰り返しを表現することを
ここでは、

関数型プログラミング
と呼ぶことにします。
Rubyで関数型プログラミング
Ruby の Array は 配列で実装されている。

遅い + メモリを消費する

次の操作が

先頭への要素の追加(cons)
連結(append)
push などが破壊的操作

関数型プログラミングをするの...
Rubyで関数型プログラミング

リストのデータ構造を自分で作ってみた!
ImmutableList
ImmutableList

特徴
単方向連結リスト(singly-circularly-linked list)
非破壊的(immutable)
Cで実装 (C Extensions)
動作が高速
ImmutableList
OCaml を意識したメソッド
cons
head, tail
rev_append, rev, append
length
nth
Basic
Quick Sort
クイックソート
一般的に最も高速なソート O(n log n)、安定ソートではない
アルゴリズム
1. 適当に数(ピポット)を選ぶ
2. ピポットより小さい数を前方、大きい数を後方に分割
3. 2分割された各々のデータを、...
Quick Sort
Benchmark
先頭に長さ3のリストを連結するのにかかった秒数

連結回数

Array

ImmutableList

10

1.50E-05

2.00E-05

1000

0.007251

0.00166

10000

0.7...
RubyGemsで公開中

RubyGemとは
Rubyのライブラリのパッケージ管理システム
Install
コマンド一発で導入可能
ご静聴ありがとうございました

詳しい話はブログで
http://gam0022.net/blog/2013/10/22/immutablelist-gem/
http://gam0022.net/blog/2013/10/18/gems-wi...
Upcoming SlideShare
Loading in …5
×

Rubyで関数型プログラミングをするためのgemを作った

659 views
561 views

Published on

Rubyで関数型プログラミングをするために作った
immutable_list gem
の紹介です。

IT Cafe'2013というイベントでLTする予定です。

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
659
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Rubyで関数型プログラミングをするためのgemを作った

  1. 1. Rubyで関数型プログラミン グをするためのgemを作った @gam0022
  2. 2. 自己紹介 Twitter: @gam0022 情報科学類3年(coins11) 大五郎botの飼い主 COJT SWコース Ruby と C# けっこうなんでも書きます
  3. 3. Rubyで関数型プログラミング 一般的な言語がループで繰り返しを表現するのに対して 再帰を用いて繰り返しを表現することを ここでは、 関数型プログラミング と呼ぶことにします。
  4. 4. Rubyで関数型プログラミング Ruby の Array は 配列で実装されている。 遅い + メモリを消費する 次の操作が 先頭への要素の追加(cons) 連結(append) push などが破壊的操作 関数型プログラミングをするのには致命的
  5. 5. Rubyで関数型プログラミング リストのデータ構造を自分で作ってみた! ImmutableList
  6. 6. ImmutableList 特徴 単方向連結リスト(singly-circularly-linked list) 非破壊的(immutable) Cで実装 (C Extensions) 動作が高速
  7. 7. ImmutableList OCaml を意識したメソッド cons head, tail rev_append, rev, append length nth
  8. 8. Basic
  9. 9. Quick Sort クイックソート 一般的に最も高速なソート O(n log n)、安定ソートではない アルゴリズム 1. 適当に数(ピポット)を選ぶ 2. ピポットより小さい数を前方、大きい数を後方に分割 3. 2分割された各々のデータを、それぞれソート(1に戻る)
  10. 10. Quick Sort
  11. 11. Benchmark 先頭に長さ3のリストを連結するのにかかった秒数 連結回数 Array ImmutableList 10 1.50E-05 2.00E-05 1000 0.007251 0.00166 10000 0.727542 0.015206 100000 102.080825 0.414083
  12. 12. RubyGemsで公開中 RubyGemとは Rubyのライブラリのパッケージ管理システム
  13. 13. Install コマンド一発で導入可能
  14. 14. ご静聴ありがとうございました 詳しい話はブログで http://gam0022.net/blog/2013/10/22/immutablelist-gem/ http://gam0022.net/blog/2013/10/18/gems-withextensions/

×