タグ

curryに関するnantanのブックマーク (4)

  • Java8のラムダって高階関数じゃないの?って話 | システムアーキテクトのごった煮

    先日、関Javaに行った時、 「Javaのラムダは高階関数じゃないよ~」って教えて頂きました。 う~ん、確かにJavaは関数をファーストクラスオブジェクトとしてサポートしている訳ではないので、高階関数の定義から外れてしまうんだろうな~。。 ただ、クロージャはレキシカルスコープを伴うファーストクラスなので、完全にJavaは未サポートなんだけど、高階関数は ・引数として関数を取れる ・返り値として関数を返せる なので、Java8のラムダサポートでそれっぽく書けるんじゃないかな~って思ってました。 っで、少し興味がわいたので、Java8で高階関数チックに書いてみました。 まずは、僕が大好きなカリー化。ちなみに、カレーは関係ありません。 カリー化ってハスケル・カリーさんに因んで名付けられたんですね、ややこしい。 カリー化 public class CurryTest { static interf

    Java8のラムダって高階関数じゃないの?って話 | システムアーキテクトのごった煮
  • JavaScript で引数束縛: Days on the Moon

    引数束縛 (カリー化) の話。まずは「JavaScriptでカリー化」(檜山正幸のキマイラ飼育記)。タイトルを見てどこかで聞いたような話だなと思ったら「関数の変形」(Effecttive JavaScript - Dynamic Scripting) だった。だが、前者は文字列に戻してから評価というのが力技っぽくて個人的に好きでないし、後者は汎用的過ぎていささかわかりにくい。そこで今回は先頭の引数から束縛していくというのに的を絞ってみたいと思う。 まず第 1 引数のみを束縛する場合。Function#apply を使えば引数を配列として渡せるので、束縛された値と後から渡された引数とを連結してやればいいのではないか。 function curry(func) { return function (first) { return function () { var args = Array.p

  • JavaScriptでカリー化 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    JavaScriptでカリー化。ありがち、つうか実際にあるでしょうね。小ネタと思ってやりはじめたら、意外と混乱した。一種のメタプログラミングのはずだが、実際にはテキスト加工処理。 内容: カリー化ってなに? カリー化を行う関数を作る:準備 カリー化を行う関数を作る:テキストのパッチワーク カリー化を行う関数を作る:組み立て ●カリー化ってなに? 2引数の関数f(x, y)に対して、「gがfのカリー化」だとは、f(x, y) = g(x)(y) が常に成立すること -- ゴチャゴチャ説明するより実例実例: functio sum(x, y) { return x + y; } このsumのカリー化の例: function curried_sum(x) { return function (y) {return sum(x, y);} } curreid_sum関数は1引数で、戻り値として関数

    JavaScriptでカリー化 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • JavaScript でカリー化、再び: Days on the Moon

    以前、「JavaScript で引数束縛」において関数のカリー化を試みました。しかし、そこでカリー化された関数は、そのままでは一度しか部分適用ができず、また、最初の関数呼び出しは必ず部分適用として扱われていました。 function mean3(a, b, c) { return (a + b + c) / 3; } // 「JavaScript で引数束縛」における curry 関数。 var curriedMean3 = curry(mean3); curriedMean3(1)(2, 3); // => 2 curriedMean3(1)(2)(3); // => TypeError: curriedMean3(1)(2) is not a function // そのままでは部分適用を 2 回以上行えない。 // curry(curriedMean3(1))(2)(3) なら大丈夫

  • 1