トップページ > プログラム > 2016年07月14日 > 9qkjMq+e

書き込み順位&時間帯一覧

3 位/168 ID中時間01234567891011121314151617181920212223Total
書き込み数0400000000000000000000408



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
+ JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net

書き込みレス一覧

オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
105 :デフォルトの名無しさん[sage]:2016/07/14(木) 01:02:32.63 ID:9qkjMq+e
>>104
言うと思ったw

でお前これから先仕様なんて調べるの?
調べないよね。もう覚えてしまったから。
あとは文字を見れば思い出すはずだ。

適切な名前があると覚やすいっていうのはこういうこと。
+ JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net
71 :デフォルトの名無しさん[sage]:2016/07/14(木) 01:04:10.04 ID:9qkjMq+e
>>70
そういう話じゃないですよね。
カリー化をbindと勘違いしてる。なさけないって話ですよ。
+ JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net
72 :デフォルトの名無しさん[sage]:2016/07/14(木) 01:29:39.76 ID:9qkjMq+e
> Good Partsのコードではthis値を使っていなかったからnullにしたけど、必要なら該当オブジェクトにbindすればいいよ

>>68の例で言えば、必要なオブジェクトはobjです。
どうやりますか?

> var add1 = add.bind(null, 1); // thisのbind + 部分適用
この行のnullをobjに変えてもcurryと同じ動きにはなりませんよ。

bindは現在のthisとは無関係に固定のオブジェクトに
結びつけるのでbindを使ってcurryは実装できません。
+ JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net
73 :デフォルトの名無しさん[sage]:2016/07/14(木) 01:30:44.10 ID:9qkjMq+e
一つ忘れていたので訂正

> var add1 = add.bind(null, 1); // thisのbind + 部分適用
この行の null を obj に変えても this に変えても curry と同じ動きにはなりませんよ。
+ JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net
81 :デフォルトの名無しさん[sage]:2016/07/14(木) 22:30:34.64 ID:9qkjMq+e
>>78
明確な定義はあるんだが勘違いしている人が
多すぎるってのが問題なんだよ。

カリー化と部分適用が同じだと主張している人、
そして同じだと主張している人を知ったうえで
それは間違いだと言ってる人。

一般論として後者が正しいと思うね。知らずに主張している人と
知っていて主張している人。知っている人の方が信頼できるから。

(もしカリー化と部分適用は違うという主張している人を知ったうえで
同じだと主張している人がいるならば、その話を聞いてから考えるべきことだけど)
+ JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net
82 :デフォルトの名無しさん[sage]:2016/07/14(木) 22:33:41.98 ID:9qkjMq+e
>>79

>>68でちゃんと書いてるのに
分かってないのかな?

>  var curried_add = _.curry(add); // カリー化
>  var add2 = curried_add(2); // 部分適用


curried_addっていうのは、curried_add(2)とすることで
部分適用ができる関数。

単なるaddはそんなことはできない。
addからcurried_addを作るのがカリー化

カリー化された関数は、func(1) と書くことで
部分適用ができないといけない。

>>79には、func(1)とすることで部分適用できる関数は存在していない。
+ JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net
84 :デフォルトの名無しさん[sage]:2016/07/14(木) 22:52:32.54 ID:9qkjMq+e
カリー化については関数型言語を知っている人が詳しいよ。
そもそも関数型言語の文化のものだから。

http://d.hatena.ne.jp/kazu-yamamoto/20110906/1315279311
いろんな定義

「カリー化する」という用語は、すくなくとも以下の3つの意味で使われているようだ。

1. 部分適用という意味
・これは明らかに間違い

2. 「複数の引数を取る関数」を「一引数を取る関数のチェインに直す」こと
・これはkmizuさんの定義。世間でもよく使われる。

3. 「構造体を一つ取る関数」を「構造体のメンバーを複数の引数にばらし、一引数を取る関数のチェインに直す」こと
・これは僕の定義。というか、Haskellコミュニティの定義。


一引数を取る関数のチェインに直すことがカリー化の定義の一つなので
カリー化した関数が2つの引数を取ることはないのである。
+ JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net
85 :デフォルトの名無しさん[sage]:2016/07/14(木) 22:56:20.75 ID:9qkjMq+e
>>83

> カリー化は部分適用と混同されやすい。部分適用とは、複数引数ある関数の引数の一部だけに実引数を適用する操作のことで、
> 上述のd iv(x,y) の例で言えば、 div から inv を導出する操作を指す。
> 一方、カリー化はcdevを導出する操作であり、引数への値の適用までは行わない。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

この部分だな。

curried_addのように「引数を一つだけ取り」「引数が足りなければ関数を返す」ようすることがカリー化


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。