I wanted to hack a quick script that simply splits a nucleotide sequence (a string like “ATGAAGAAC…”) into a List of triplets aka codons (Strings: “ATG”, “AAG”, “AAC”, …) to do other stuff with.
What’s wrong with this one-liner, why do I get a “java.lang.OutOfMemoryError: GC overhead limit exceeded” ?
def tripletize(s:String, accu:List[String] = List.empty[String]):List[String] = tripletize(s.drop(3), s.take(3) :: accu)
I’m not asking what that is, but why I get it and how to avoid.
Btw, I know this would give me the reverse order, but I don’t know how to avoid that scala considers String as a collection itself. i.e. this:
scala> List.empty ++ "hello"
res6: List[Char] = List(h, e, l, l, o)
When do you stop?
dropwon’t terminate the recursion just because there’s nothing more to drop. Also, what do you return? You never say. You need to do something like