2
私は次のように再帰を使用してGray Codesためのストリーム作った:例えばただ1つの要素から再帰ストリームを作成しますか?
scala> gray(2)
res17: List[String] = List(00, 01, 11, 10)
のために、私は本当にリストを必要としないように
val gray: Stream[List[String]] = {
List("") #:: List("0", "1") #:: gray.tail.map {gnext}
}
val gnext = (i:List[String]) => i.map {"0" + _} ::: i.reverse.map {"1" + _}
をそれは要素0から生成することができるので、定義内の「0」、「1」):
scala> gnext(List(""))
res18: List[java.lang.String] = List(0, 1)
最初の要素からストリームを生成するために使用できるウェイ/パターンはありますか?
クール、ちょうど全体のリストの代わりに、尾を使用しています。私は最初のバージョンがメモされると言っても間違いないでしょうが、 'iterate'のバージョンはそうではありませんか? –
@Luigiも 'グレー'は関数なので、私はメモを適用するとは思わない。 –
良い点 - 両方のストリームオブジェクトです。私が理解しているように、 'Stream'は怠惰な' List'sなので、新しい 'gray'オブジェクトで' gray(10) 'を参照すると時間がかかりますが、' gray(8)その値はすでに計算されているため、即座に表示されます。つまり、自動メモ作成のようなものです。 –