Debugging Sparrow

스칼라, 함수형 프로그래밍(3) - 평가 전략과 종료(Evaluation Strategies and Termination)

2020/03/12 Scala 스칼라 함수형 프로그래밍 Functional Programming Evaluation Strategies Termination

Martin Odersky의 Functional Programming Principles in Scala 강의를 공부하며 정리했습니다.

Call-by-name, Call-by-value and Termination

Call-by-name과 Call-by-value가 표현식이 종료될 수 있다면 표현식을 똑같은 값으로 줄인다는 것을 알고 있다. 하지만 종료되지 않는다면 어떻게 될까? 중요한 정리중 하나는 다음과 같다.

  • Call-by-value이 종료될 수 있다면, Call-by-name 또한 종료될 수 있다.
  • Call-by-name이 종료된다고 Call-by-value가 종료되는 것은 아니다.

아래는 예시이다.

example
1
2
3
4
5
6
scala> def loop: Int = loop
scala> def first(x: Int, y: Int) = x // Call-by-value
scala> first(1, loop) // loop forever
scala> def first(x: => Int, y: => Int) = x // Call-by -name
scala> first(1, loop)
res0: Int = 1

위의 함수가 있을 때

스칼라에서는 기본적으로 call-by-value를 사용한다. 만약에 Call-by-name을 하고 싶다면 => 과 같이 표현한다. Call-by-name이 종료가 잘 되는 장점이 있는데도 Call-by-value를 기본적으로 쓰는 이유는 인수를 반복적으로 계산하지 않아 효율적이기 때문이다.

Author: dbgsprw

Link: https://dbgsprw.github.io/2020/03/12/스칼라-함수형-프로그래밍3/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
스칼라, 함수형 프로그래밍(4) - 조건과 값
NextPost >
스칼라, 함수형 프로그래밍(2) - 스칼라 프로그램의 요소
CATALOG
  1. 1. Call-by-name, Call-by-value and Termination