タグ

curryingに関するnsyeeのブックマーク (7)

  • Haskell: curry と uncurry

    http://www.haskell.org/haskellwiki/CurryingWikipedia の記事によると来のカリー化とは違うそうだ。むずかしいことはわからないが、引数の受け取り方の形式を変えるために使うことができそうだ。具体的には、1つのタプルの各要素を複数の値として、もしくは複数の値を1つのタプルとして受け取れるようにする。 > let f (x, y) = x * y > f (2, 3) 6 > curry f 2 3 6 > let g x y = x + y > g 2 3 5 > uncurry g (2, 3) 5 > :t curry f curry f :: Num c => c -> c -> c > :t curry g curry g :: Num (a, b) => a -> b -> (a, b) -> (a, b)

    Haskell: curry と uncurry
  • カリー化 != 部分適用 - kmizuの日記

    最近、ネット上でカリー化に関する記事を読んでいると、特にGroovy界隈でカリー化に関して誤解がまかり通っているようなので(特に実用的なGroovy: カレー化クロージャーによるファンクショナル・プログラミングはひどい。そもそも、Groovyの標準ライブラリ自体がカリー化を行うための関数ではないものにcurryとか付けてるから仕方無いのかもしれんが)、一言言っておく。 カリー化というのは、Groovyで言うと、 def add = {x, y -> x + y} のように、xとyという複数の引数を取って値を返す関数を def add = {x -> {y -> x + y}} //間違ってパースできないコードになっていたので修正(12/17) のように、一つの引数xをとって、「yを引数にとって値を返す関数」を値として返すような関数に変換すること、あるいは最初からそのように表現することを言う

    カリー化 != 部分適用 - kmizuの日記
  • Tools to partially apply functions with their arguments.

  • 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)
  • ■ - うっくつさん本を読む。

    id:m-hiyamaさんへ、(メソッドではない)関数のCurry化ならテキスト処理無しで出来ますよ、と。 function curry(func){ return function(x){ return function(){ var args = new Array(arguments.length+1); args[0] = x; for(var i=1;i<args.length;i++){ args[i] = arguments[i-1]; } return func.apply(null,args); }; }; } function sum(x,y){ return x+y; } alert(curry(sum)(10)(15)); alert(curry(sum)(10)(15,20));追記) 任意個のcurry化を綺麗に書くとこうなる。 function curry(f

    ■ - うっくつさん本を読む。
  • Note 1. ECMAScript. Bound functions.

  • 1