これよりも必須ではないもの:
def subs(s: String) = for {start <- 0 to s.length; end <- i to s.length} yield s.substring(start, end)
これよりも必須ではないもの:
def subs(s: String) = for {start <- 0 to s.length; end <- i to s.length} yield s.substring(start, end)
scala> "asdf".inits.flatMap(_.tails).toList
res2: List[String] = List(asdf, sdf, df, f, "", asd, sd, d, "", as, s, "", a, "", "")
空の文字列を削除する場合:
scala> "asdf".inits.flatMap(_.tails.toList.init).toList
res3: List[String] = List(asdf, sdf, df, f, asd, sd, d, as, s, a)
ただし、@Randall Schulz がコメントで指摘しているように、この呪文は読者にとってそれほど明白ではないことに注意してください。一方、元のバージョンはすぐにわかります。