Upgrade to Pro — share decks privately, control downloads, hide ads and more …

#okark02 lambda_driver

#okark02 lambda_driver

Yuuki Sumida

July 06, 2013
Tweet

More Decks by Yuuki Sumida

Other Decks in Programming

Transcript

  1. lambda_driver.gemで加速する 関数型プログラミング 2013/07/06 岡山Ruby会議02

  2. About me • もじゃ変 • @razon • 天領倉敷Scala/岡山Javaユーザ会 • #I社

    • #多摩 送り中
  3. About me • 2012/07

  4. About me • 2013/06

  5. About me

  6. About me

  7. None
  8. None
  9. 日常でRubyを使うのに 足りないもの…

  10. Functional-style Programming

  11. None
  12. ※ちょっと補足(しとかないとマサカリが云々…) • 所謂「関数型言語」でなくても、ある程度関数 型言語っぽい書き方はできる • Ruby自体にある程度関数型プログラミングをサ ポートする機能がある – ラムダあるし –

    カリー化できるし
  13. How to use $ gem install lambda_driver require 'lambda_driver'

  14. Feature • Proc/lambda/Symbol/Method extensions • Symbol extensions • Class extensions

    • UnboundMethod extensions • Object extensions • 全部は紹介できないのでちょっとだけ…
  15. Feature • Proc#call へのalias f = lambda{|x| x.to_s } f

    < :foo # => "foo"
  16. Feature • 関数合成 f = lambda{|x| x.to_s * 2 }

    g = lambda{|y| y.length } h = f.compose g # => #<Proc:0x007ff78aa2ab2> h.(:hoge) # => "44" ( == f.call(g.call(:hoge)) ) f << g # => f.compose(g) f << g < :hoge # => "44" ( == f.call(g.call(:hoge)) ) f >> g # => g.compose(f) f >> g < :hoge # => "8" ( == g.call(f.call(:hoge)) )
  17. Feature • 引数の入れ替え(Proc#flip) f = lambda{|x, y, z| [x, y,

    z]} h = f.flip # => #<Proc:0x007ff78a942fa> h.call(:a).call(:b).call(:c) # => [:b, :a, :c] (== f.curry.call(:b).call(:a).call(:b)) h < :a < :b < :c # => [:b, :a, :c] (== f.curry.call(:b).call(:a).call(:b))
  18. Feature • Object#revapply f = lambda{|x| x * 2 }

    "foo".revapply(f) # => "fooffoo" (== f.call("foo") )
  19. Trying “Fizz Buzz”

  20. Trying “Fizz Buzz”

  21. Trying “Fizz Buzz”

  22. Trying “Fizz Buzz”

  23. Appendix • pattern-match.gemというのもあります

  24. まとめ • lambda_driver.gemかわいい • (まだ文化的に馴染みがないので)やり過ぎると たぶん周りの人に怒られる • だから皆関数型言語やれよ!! – 天領倉敷Scalaとか(9月以降やりたい)

    – 岡山すごいHaskell読書会とか(次いつやんの?)
  25. 参考 • http://yuroyoro.github.io/lambda_driver/ • http://yuroyoro.hatenablog.com/entry/2013/03/27/190640

  26. 劇 終 ご清聴ありがとうございました