-
피보나치(fibonacci) 수열을 Scala Stream, ZStream 으로 각각 구현zio/zio1 2021. 8. 3. 00:47
문제
피보나치(fibonacci) 수열 앞 10개를 출력하는 프로그램을 아래 2가지 방법으로 각각 구현하라
- scala stream 을 이용해 구현
- ZStream 을 이용해 구현
코드
scala stream 을 이용한 구현
object ScalaStreamFibo { def main(args: Array[String]): Unit = { def fibonacci(h: Long, n: Long): Stream[Long] = h #:: fibonacci(n, h + n) fibonacci(0, 1).take(10).foreach(println) } }
ZStream 을 이용한 구현
import zio._ import zio.stream.ZStream object ZStreamFibo extends App { val fibonacci: ZStream[Any, Nothing, Long] = ZStream.unfold((0, 1)) { case (h, n) => Option(h, (n, h + n)) } override def run(args: List[String]): URIO[zio.ZEnv, ExitCode] = fibonacci.take(10).foreach(x => console.putStrLn(x.toString)).exitCode }
설명
scala stream 을 이용한 구현은 Martin Odersky 의 'Programming in Scala' 에도 나와있다. 이런 재귀를 생각해 구현하기는 매우 어렵다. 이에 비해 zio 의 ZStream 을 이용한 구현은 State 를 활용해 이해하기가 훨씬 쉬운것 같다.
'zio > zio1' 카테고리의 다른 글
ZLayer module pattern 을 이용한 dependency injection (0) 2021.08.18 Task 타입을 Future 로 변환해 자연스럽게 사용하기 (0) 2021.07.23