はじめに 思いの外話題になっているようなので、Groovyでちゃんとしたカリー化をする関数を書いてみました。ちょっとタイトルはあれですがお許し下さい。 こんな感じでいいんですよね?(ツッコミ大歓迎) ここでは、addが引数を3つ取って、加算するクロージャです。メソッドrealCurryはクロージャを引数にとり、カリー化したクロージャを返却します。 add = {a, b, c -> a + b + c } ↓カリー化! curriedAdd = {a -> {b -> {c -> a + b + c}}} 本当はClosure.metaClass.getCurryとかでやりたかったんですけど、どうもdelegateまわりが変な挙動をするのでバッサリ諦めました。あと、都合によりアンカリー化は実装しておりませぬ。 foldLeftで使ってみる (2011-09-06 追記) カリー化 != 部
最近、ネット上でカリー化に関する記事を読んでいると、特にGroovy界隈でカリー化に関して誤解がまかり通っているようなので(特に実用的なGroovy: カレー化クロージャーによるファンクショナル・プログラミングはひどい。そもそも、Groovyの標準ライブラリ自体がカリー化を行うための関数ではないものにcurryとか付けてるから仕方無いのかもしれんが)、一言言っておく。 カリー化というのは、Groovyで言うと、 def add = {x, y -> x + y} のように、xとyという複数の引数を取って値を返す関数を def add = {x -> {y -> x + y}} //間違ってパースできないコードになっていたので修正(12/17) のように、一つの引数xをとって、「yを引数にとって値を返す関数」を値として返すような関数に変換すること、あるいは最初からそのように表現することを言う
kmizu @kmizu 正直に言うと、Groovy自体は別に好きでも嫌いでもないのだけど、カリー化してないのにcurryとかいうメソッド名付けてたり(標準で)、概念の無理解が目立つ部分があって、その辺がちょっと…という思いがあったり。 #scalajp #groovy 2011-09-04 19:43:37
2009.3.19 - 2009.4.16 - 2009.7.24 (鈴) 2011.3.23 リンク追加等 2009.4.16 時点のページ 1. はじめに 2. てほどきとインストール 3. 10 分で分かる Groovy の大半 4. もっとスクリプト言語らしく 5. クロージャ 6. おわりに 7. 参考文献 付録 1. Emacs 編集モード 付録 2. NetBeans プラグイン Groovy 応用: 遅延評価によるフィボナッチ数の計算 2009.4.8 Groovy 応用: Struts への透過的な適用 2011.3.23 1. はじめに Groovy は主に Ruby に強くインスパイアされた Java の1方言 である。 その処理系は標準的な Java VM 上で動作し,標準的な Java 言語によるプログラムと同じバイナリ形式 (class ファイル)
先日参加したStartupGroovy #1にて、参加者の方から「Groovyのクロージャはちゃんとしたクロージャか?」という質問がありました*1。 クロージャが「ちゃんとしている」とは何か 「クロージャがちゃんとしてる」とは何を意味するか、あるいは「ちゃんとしたクロージャとは何か」は、良く考えると結構難しい*2です。でもここではあまり厳密に考えないで、 「クロージャ中から参照される変数のスコープと生存期間に関して、『仮にその場所にあるのがクロージャではなくブロックで書かれていた』と想定したとき、それと同じように動作すること」 とでもしておきます*3。オレオレ定義です。 言いかえると、クロージャが「ブロックを偽装したメソッド」だとして、その偽装がうまくいっている、ということです。 さて、Groovyの現在の実装においては、クロージャ中のコード(に対応するバイトコード)は、そのクロージャが置
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く