2011-09-05
どっひぇー
巷はカリー化と部分適用で溢れてた。
そんなのはどうでもよくて、カリー化と部分適用が違うのはなんとなく分かってたのでそれもよくて、今回問題なのはカリー化自身について。
配列とtuple
http://www.haskell.org/haskellwiki/Currying
こういったところを見るとtupleを展開(?)することもカリー化だと言ってる。
ここで思ったのが配列も同じようにならないのか?ということ。
少々強引だが、tupleも配列も複数のデータを1引数にまとめるという意味で同じような気がする。
つまり
f :: (a, b, c) -> d g = curry f
で
g :: a -> b -> c -> d
となるならば
f :: [a] -> b g = curry f
は
g :: a -> a -> ... -> a -> b
というマジキチな関数にならないのか?ということ。
多分こいつはかりーさんの論文読めば厳密な定義があったりするのだろうが、何しろ私はその分野の人ではないし、形無しラムダをwikipediaのラムダ式の項だけ読んで知った気になっている人間なので読んでも、禁書目録の如く私は発狂して人間を辞めるためにF棟から紐無しバンジーをすることになるだろう。
ghciに愚痴 (間奏)
インタプリタなんだから.hsと同じように書ければいいものを全然違うもんだからいちいちhoge.hsを用意してコード書いてghciに食わせるとか意味わからんことしてた。
ふがーーー
あれやめてほしい、、、
Preludeのcurry/uncurry
この意味不明なのを解決すべくPreludeのcurry/uncurryを使ってghci上で:tすればわかるだろうと意気込んだ。
まずはじめに
f a b = error "hoge"
こんなfを用意して:tすると、もちろん
*Main> :t f f :: t -> t1 -> t2
となる。
次に
*Main> :t curry f curry f :: a -> b -> t1 -> t2
どっひぇーーーー
さらに
*Main> :t uncurry $ curry f uncurry $ curry f :: (a, b) -> t1 -> t2
もこなあぱぱ
違った...
あばばばばーーー
これはいったいどう言うことだ...
埼玉九州
埼玉帰りたい
埼玉昨日
埼玉破壊力
全てが倍返しになっとるんぞこれ!?
なってません
結局わからなかった...
- さっきついき (さっきっていつやねん!!!09/05 10:50です
こんなやりとりが
どっひぇー URL
@Flast_RO 何がやりたいのかによると思いますけど、 curry と uncurry が逆じゃないですかね?
2011-09-05 10:16:53 via TwitVim to @Flast_RO
@melponn あ、なんか消えてる... んーcurryしてuncurryすれば元の関数に近いなにかが出てくるはずと思ってやったら違いましたーということです
2011-09-05 10:20:18 via dbtwit to @melponn
@Flast_RO それなら f (a,b) = error "hoge" な関数を curry して uncurry すれば元の関数っぽいのになるはずです
2011-09-05 10:22:11 via TwitVim to @Flast_RO
@melponn それはそうなんですが、元からカリー化する必要のないような関数を投げると何もされないと思ったら引数増えましたーということをですね...
2011-09-05 10:23:38 via dbtwit to @melponn
@Flast_RO あれ、でもやっぱり f は元に戻ってるような? curry するなら t が (a,b) である必要があるってことが追加されただけで。
2011-09-05 10:36:07 via TwitVim to @Flast_RO
@melponn 私はfが元からカリー化されてるからcurryに投げてもそのまま帰ってきてuncurryすると(t, t1) -> t2になるんではないか?と思ったのです
2011-09-05 10:38:10 via dbtwit to @melponn
@Flast_RO f は t->(t1->t2) な関数なので、((a,b)->c) の (a,b) の部分が t として判断されて、c の部分が (t1->t2) と判断されるんだと思います
2011-09-05 10:41:29 via TwitVim to @Flast_RO
@melponn はーなるほどーそうすると確かにtは(a, b)にならざるを得ないですね
2011-09-05 10:42:23 via dbtwit to @melponn
@Flast_RO なので a とか b とかじゃなくて Int->Int->Int な関数を curry に渡すと型エラーになりますね
2011-09-05 10:47:12 via TwitVim to @Flast_RO
なるほろ
- 9 http://www.google.com/reader/view/
- 8 http://t.co/5Fxduzy
- 6 http://www.google.com/reader/view/?hl=en&tab=wy
- 5 http://k.hatena.ne.jp/keywordblog/Haskell
- 4 http://t.co/3k6yZ3N
- 4 http://www.google.co.jp/
- 3 http://d.hatena.ne.jp/keyword/Haskell
- 3 http://longurl.org
- 3 http://reader.livedoor.com/reader/
- 3 http://www.google.co.jp/reader/ig/?lang=ja&country=jp&.lang=ja&.country=jp&synd=ig&mid=26&ifpctok=4748688366587477041&exp_rpc_js=1&exp_track_js=1&exp_ids=31215&parent=http://www.google.co.jp&libs=GGjkAGNfaxw/lib/liberror_tracker.js,5SrQ6tE4xyQ/lib/librpc.
