2015年5月12日火曜日

Scala関数型デザイン&プログラミング P34

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 件のコメント:

コメントを投稿