末尾再帰

末尾再帰で、あるディレクトリ以下のすべてのファイルの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 )

っていう行がちょっと読み辛いが、こんなもんだよなぁ。どこかまだ改善の余地あるかなぁ(゜〜゜)