どっひぇー
巷はカリー化と部分適用で溢れてた。
そんなのはどうでもよくて、カリー化と部分適用が違うのはなんとなく分かってたのでそれもよくて、今回問題なのはカリー化自身について。
配列と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です
こんなやりとりが