2
단일 스트림으로 결합하는 방법을 생각해 낼 수 없습니다. 내가 가진 :스칼라에서 이전 값과 두 번째 스트림을 기반으로 스트림을 만듭니다.
Stream(
init,
nextFoo(init, bar1),
nextFoo(nextFoo(init, bar1), bar2),
nextFoo(nextFoo(nextFoo(init, bar1), bar2), bar3),
nextFoo(nextFoo(nextFoo(nextFoo(init, bar1), bar2), bar3), bar1),
...
)
또는, 즉, 각 요소는 loop
다음 요소 내 출력 스트림에서 이전 요소에 따라 달라집니다 : 내가 원하는 것은이 같은 스트림
val loop: Stream[Bar] = Stream(bar1, bar2, bar3) #::: loop
val init: Foo = new Foo()
def nextFoo(foo: Foo, bar: Bar): Foo = { ... }
입니다.
닭고기 및 달걀 문제입니다. zip
첫 번째 스트림과 함께 두 번째 스트림을 만들고 싶지만 두 번째를 압축하지 않고 첫 번째 스트림을 만들 수 없습니다 (예 : Stream.iterate
).
스칼라의 콜렉션 라이브러리에있는 함수만으로 가능합니까? 나는 아마도 (new Iterator { ... }).toStream
과 함께 뭔가를 집어 넣을 수 있지만 가능하다면 그것을 피하고자합니다. "가짜"바 푸 그 뜻
감사합니다! 방금 같은 결과를 갖는 알고리즘을 생각해 냈습니다 :'Stream.iterate ((init, loop)) {case (f, b # :: bs) => (nextFoo (f, b), bs)} .map (_. 1)'. 나에게 너는 덜 어색해. 이 솔루션과 솔루션을 어떻게 비교할 것입니까? –
해결책을 편집했습니다.'Stream (init) # ::: ...'대신'init # :: ...'을 사용할 수 있습니다. –