2015年6月27日土曜日

scala関数型デザイン&プログラミング P195

Exercise 9.7 flatMapをベースとしてproductとmap2を実装せよ
def product[A,B](p: Parser[A], p2: => Parser[B]): Parser[(A,B)] =
  flatMap(p)(a => map(p2)(b => (a,b)))
def map2[A,B,C](p: Parser[A], p2: => Parser[B])(f: (A,B) => C): Parser[C] =
  for { a <- p; b <- p2 } yield f(a,b)
 for内包表記は、もう忘れていた
P74を参考にすれば
 p flatMap ( a =>
  p2 map ( b =>
   f(a,b))) という意味になる
Exercise 9.8 mapをflatMapや他のコンビネータをベースにして表現せよ
def map[A,B](p: Parser[A])(f: A => B): Parser[B] =
 p.flatMap(a => succeed(f(a)))

0 件のコメント:

コメントを投稿