In scala den Code unten funktioniert (ich weiß, es ist seltsam, aber ich will Strom Concat mit rekursiven Funktionen testen)-Stream mit rekursive Funktion in Elixir Sprache
def ones(s: Stream[Int]): Stream[Int] = 1 #:: ones(s)
ones(Stream.from(1)).take(10).toList
ich etwas Elixier Code geschrieben hat, die gleichwertig sein sollte der Scala-Code und es hängt. Wie kann ich den gleichen Effekt wie oben beschrieben erreichen?
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
Sie haben keine Bedingung zur Verfügung gestellt, um die Rekursion zu stoppen, deshalb hängt es. Ich weiß nicht über Scala, aber es sieht so aus, als ob Sie nur 10 Elemente aus dem Stream nehmen, da Streams faul sind, so ist dies genug, um zu stoppen. Korrigieren Sie mich wenn falsch, ich bin nur ein Anfänger;) – nightire
@nightire Oben scala Code ist genau das gleiche mit Elixier-Code, aber man ist Arbeit, andere nicht. Ich weiß nicht, warum zwei Sprachen ein anderes Verhalten haben. – blueiur