
正直に言うと、Groovy自体は別に好きでも嫌いでもないのだけど、カリー化してないのにcurryとかいうメソッド名付けてたり(標準で)、概念の無理解が目立つ部分があって、その辺がちょっと…という思いがあったり。 #scalajp #groovy
2011-09-04 19:43:37
@fumokmm Groovyのアレは概念としては「部分適用」とかそう呼ばれるものになります。ちょっと次から違いを説明します。ちょっとわかりやすくするために型な話になります。 #groovy
2011-09-04 20:01:33
@fumokmm で、Groovyのcurryって、 add = { x, y -> return x * y }; add.curry(2) とかいう風に使うわけですが、これはどう見てもカリー化じゃなくて部分適用だろ、とツッコミたくなるわけです。 #groovy
2011-09-04 20:06:43
@kmizu ですね、部分適用ですね。ちなみに add.curry(2) ってした場合、戻りの型は CurriedClosure という痛い名前になってますw
2011-09-04 20:09:28
これも部分適用をcurryと称している例では。 / Prototype JavaScript framework: Function.curry http://t.co/7KLIBpG
2011-09-04 20:29:01
The joy of clojureのP127に以下の説明があるのですが、これは正確なのかな。The use of partial differs from the notion of currying in a fundamental way...
2011-09-04 20:32:31
A function built with partial will attempt to evaluate whenever it's given another argument...
2011-09-04 20:33:46
A curried function on the other hand will return another curried function until it receives a pre-determined number of arguments ...
2011-09-04 20:34:42
--- only then will it evaluate. Because Clojure allows functions of variable number of arguments, currying makes little sense.
2011-09-04 20:35:54
つまり、3個の引数を取る関数をカリー化したものに1個の引数で呼び出すと直ちに評価されずに2個引数をとる別の関数が得られる。部分適用だと直ちに評価されてしまう。
2011-09-04 20:38:22
誤用が広まって市民権を得るということもあるので、部分適用を一部の言語ではカリー化と呼ぶのは方言の一種ということでよいのではないでしょうかね。実際、プログラミングの世界ではよくあることに思われます。
2011-09-04 20:40:26
@ryoasai74 僕、それよくないと思います。使うならバウンデッドコンテキストを意識して利用してほしいです。groovy 界隈だけじゃないですか?その誤用って。他の昔からある関数型言語ではカリー化と部分適用をごっちゃにしてるのは少ない【気がします】が。
2011-09-04 20:44:06
@everpeace 先に上げたJSのprototype.jsの例のように動的言語のコンテキストでは結構ごっちゃになって使われているようです。 http://t.co/ZwdNbg9
2011-09-04 20:46:43
でも、カリー化自体に、引数の束縛という動作は関係ない概念なのに、どこのだれが、部分適用とカリー化をごっちゃに言い出したんだろう?そもそも混用される概念じゃないと思うが。。。
2011-09-04 20:46:44
@ryoasai74 boostのドキュメントを読むと、カリー化(第一引数のみ)を一般化したものが部分適用みたく見えますけれども、違うものなのでしょうか。 http://t.co/RTccJvS
2011-09-04 20:52:18
この説明だと部分適用との違いがよくわからない? / カリー化 - Wikipedia http://t.co/WbHYJ5o
2011-09-04 20:52:35
@ryoasai74 何の文脈で話をしてるのか分かりませんが、「部分適用だと直ちに評価されてしまう」の意味がよく分かりません。f(x,y,x)=x+y+z に x=2 を部分適用すれば、g(y,z)=2+y+z となり、y,z は評価されないと思いますが。
2011-09-04 20:52:47
@ryoasai74 そうなんですか。完全な誤用ですね。。。。こんなん市民権得てたら怖いですね。カリー化は束縛なんて関係ない関数の型の話なのに。
2011-09-04 20:54:35
Currying - Wikipedia, the free encyclopedia http://t.co/BkmtIVa
2011-09-04 20:54:41
The Uncarved Blog: Partial Function Application is not Currying http://t.co/c9L1bkQ
2011-09-04 20:55:14