Exercise2.3
カリー化では、引数2つの関数fが、fを部分的に適用する引数1つの関数に変換される。この場合も、コンパイルできる実装は1つだけである。この実装を記述せよ。
def curry[A,B,C](f:(A,B)=>C):A=>(B=>C) =
a=>(b=>f(a,b)) これは a=>b=>f(a,b)という書き方でいいのだろうか。
curryの返り値としては、aを決めれば b=>cつまりb=>f(a,b)となる関数ができる と理解していいのだろうか。
Exercise2.4
Curryによる変換を逆向きに行うuncurryを実装せよ。=>は右結合であるため、A=>(B=>C)はA=>B=>Cと記述できる。
def uncurry{A,B,C](f:A=>B=>C):(A,B)=>C =
(a,b)=>f(a)(b)
fは、aを引数として、b=>cとなる関数を返す関数
b=>cという関数がf(a) つまり bを引数としてf(a)という関数がf(a)(b)を返すという意味で
とらえるということと理解したが、これでいいのだろうか。
0 件のコメント:
コメントを投稿