Exercise3.9 foldRightを使ってリストの長さを計算せよ
def length[A](as:List[A]):Int=
foldRight(as,0)((a,b)=>b+1)
Exercise3.10 リスト再帰の総称関数foldLeftを記述せよ。
def foldLeft[A,B](as:List[A],z:B)(f:(B,A)=>B):B =
as match {
case Nil => z
case Cons(x, xs) => f(foldLeft(xs, z)(f),x)
}
これで、求められるけれど、末尾再帰でないので、だめなようだ。
あくまで、最後はfoldLeftの形でないとだめなので、正しい答は
def foldLeft[A,B](l: List[A], z: B)(f: (B, A) => B): B = l match {
case Nil => z
case Cons(x,xs) => foldLeft(xs, f(z,x))(f)
}
0 件のコメント:
コメントを投稿