Language/scala
Evaluation Rules
devidea
2017. 9. 12. 16:35
coursera의 Functional Programming Principles in Scala 강좌를 들으며 중요한 개념들만 블로그에 정리해 보고자 한다.
call by value : 함수를 실행하기 전에 인자들의 값을 구한다.
call by name : 함수를 먼저 실행하고 인자값이 필요할 때 값을 구한다.
다음과 같이 함수가 있다고 하자. 인자값을 달리해서 각 함수를 호출할 때 어떤 속도 차이가 있는지 보자.
def square1(x:Int, y:Int) = x*x
def square2(x: => Double, y:Int) = x*x
square1(2,3) : 2*2 -> 4
square2(2,3) : 2*2 -> 4
동일한 단계가 필요하다.
square1(3+4,8) : square1(7,8) -> 7*7 -> 49
square2(3+4,8) : (3+4)(3+4) -> 7(3+4) -> 7*7 -> 49
call by value가 더 빠르다.
square1(7,2*4) : square1(7,8) -> 7*7 -> 49
square2(7,2*4) : (3+4)(3+4) -> 7(3+4) -> 7*7 -> 49
call by name이 더 빠르다.
square1(3+4,2*4) : square1(7,2*4) -> square1(7,8) -> 7*7 -> 49
square2(3+4,2*4) : (3+4)(3+4) -> 7(3+4) -> 7*7 -> 49
동일한 단계가 필요하다.
반응형