作品次のコード(私はそれが奇妙だけど、私は、再帰関数を使用してストリームの連結をテストしたい)ストリームScalaで
def ones(s: Stream[Int]): Stream[Int] = 1 #:: ones(s)
ones(Stream.from(1)).take(10).toList
私はと等価である必要があり、いくつかのエリクシルのコードを書きましたスカラコードとそれがハングアップします。上記のスカラーコードと同じ効果を得るにはどうすればよいですか?
defmodule Ones do
def ones(s) do
head = Stream.take(s, 1)
Stream.concat(head, ones(s))
end
end
Ones.ones(Stream.iterate(1, &(&1 + 1))) |> Enum.take(10) # hang
再帰を停止するための条件を指定していないため、ハングアップしています。 スカラについてはわかりませんが、ストリームが遅延しているので、ストリームから10個の要素しか取らないように見えます。 間違っていると私を修正してください、私はちょうど初心者です) – nightire
@nightireスカラーコードはエリクシールコードとまったく同じですが、1つは仕事であり、他のものはそうではありません。なぜ2つの言語が違う振る舞いをしているのかわかりません。あなたのコメントのために – blueiur