タグ

ブックマーク / dt.hateblo.jp (2)

  • Rubyでのカリー化、をまじめに。 - DT日記

    DT戦記: 2011-09-10 カリー化ってなぁに? をRubyから。では、カリー化とは何かといふことを、かなり廻りくどいやりかたで説明しました。廻りくどいだけで、これ自体は別に悪いアプローチではないのですが。 この記事でも前回の記事と同じく、Rubyのラムダ式、つまり->(arg){ ... } や lambda{ |arg| ... } で生成した Proc(lambda)クラスのオブジェクトを「函数」と呼ぶことにします。 前回のコードをひとつ引用してみます。 f1 = ->(x, y){ return x + y } f2 = ->(x){ return ->(y){ return x + y } } このカリー化されたコードの問題は、「値をふたつとって、足した値を返したい」って明確な目的があるのに、f2ではxとyを分けて書かざるを得ず、ばらばらになってコードが読みにくくなることが

    Rubyでのカリー化、をまじめに。 - DT日記
  • カリー化ってなぁに? をRubyから。 - DT日記

    9月4日とか5日あたりにTwitterでカリー化の話で盛り上がってたので、話についていけなかったひと向けに、自分なりにRubyを使ってカリー化の説明を試みます。 はじめに、Rubyについてかるーく。 xyz = ->(x, y, z){ return x * y * z } puts xyz.call(2, 3, 4) #=> 24 puts xyz.call(3, 3, 3) #=> 27 これが、「三つの引数をとって、すべてを掛け合せた数値を返す」函数(みたいなもの)のコードになります。return はなくても良いのですが、このあとの説明が読みにくくなるので、意味を明確にするために付ける方針で統一します。 この書き方(->(n){ ... })は、もしかするとあなたが既に慣れ親しんでるかもしれない「メソッド」とは似てるけど別物なので気をつけてください。その説明は省きますが、defキーワ

    カリー化ってなぁに? をRubyから。 - DT日記
  • 1