0

ヌクレオチド配列(「ATGAAGAAC ...」のような文字列)をコドンとして知られるトリプレットのリスト(文字列:「ATG」、「AAG」、「AAC」、...)に単純に分割する簡単なスクリプトをハックしたかった他のことをするために。

このワンライナーの何が問題になっていますか?「java.lang.OutOfMemoryError:GCオーバーヘッド制限を超えました」と表示されるのはなぜですか?

def tripletize(s:String, accu:List[String] = List.empty[String]):List[String] = tripletize(s.drop(3), s.take(3) :: accu)

私はそれが何であるかを尋ねているのではありませんが、なぜ私がそれを得るのか、そしてどのように回避するのかを尋ねています。ところで、これで逆の順序になることはわかっていますが、scalaがStringをコレクション自体と見なすのを避ける方法がわかりません。すなわちこれ:

scala> List.empty ++ "hello"
res6: List[Char] = List(h, e, l, l, o)
4

1 に答える 1

4

いつ止まりますか? dropドロップするものがないという理由だけで再帰を終了することはありません。また、何を返しますか?あなたは決して言いません。あなたは次のようなことをする必要があります

= if (s.length==0) accu else tripletize(s.drop(3), s.take(3) :: accu)
于 2012-08-29T15:59:43.170 に答える