末尾再帰で、あるディレクトリ以下のすべてのファイルのListを返す関数を作ってみた。
object TailrecTest { type files = List[java.io.File] def fileSearch(f:File):files = { @tailrec def sub(fs:files,result:files):files = { if( fs.forall(_.isFile )){ result:::fs }else{ sub( fs.filter( _.isDirectory ).flatMap(_.listFiles ) , fs.filter(_.isFile ):::result ) } } sub( List(f) , Nil ) }
sub( fs.filter( _.isDirectory ).flatMap(_.listFiles ) , fs.filter(_.isFile ):::result )
っていう行がちょっと読み辛いが、こんなもんだよなぁ。どこかまだ改善の余地あるかなぁ(゜〜゜)