Evaluation

  • Evaluation : 프로그래밍 개념에서의 평가는 표현식(expression)의 “정식(canonical)” 값을 결정하는 것이다.
    • 표현식(Expression) : 3 + 5, 11 - 3, 2 * 4 와 같이 어떤 값으로 이행하는 임의의 유효한 코드 단위이다.
    • 위 표현식은 모두 8의 값을 갖는데, evaluation은 이처럼 표현식의 값을 결정하는 것을 말한다.
    • Python의 eval 함수를 통해서 표현식의 실제값을 찾는 데에 사용할 수 있다.
>>> eval('8') == eval('3 + 5') == eval('2 * 4')
True

Evaluation Method

  • 평가 방법으로는 1) 적용 순서 평가, 2) 정규 순서 평가 가 있다.
  • 두 방법이 아래 코드를 어떻게 평가하는지 확인해보자.
(define (h x) (+ x x))
(h (+ 1 1))

적용 순서 평가 (Applicative-Order Evaluation)

  • 평가 방식
  1. (+ 1 1) 을 먼저 평가해 2 값을 얻는다.
  2. 함수 호출 h(2) 가 되어 (+ 2 2) 를 평가하게 된다.
  3. 결과적으로 4가 반환된다.
  • 엄격 평가
  • 대부분의 프로그래밍 언어에서 사용

정규 순서 평가 (Normal-Order Evaluation)

  • 평가 방식
  1. h(+ x x) 로 전개된다. (h (+ 1 1)) (+ (+ 1 1) (+ 1 1))로 바뀐다.
  2. 전개 후 (+ 1 1)을 두 번 평가해야 하기 때문에 중복 평가가 발생한다.
  3. 최종적으로 (+ 2 2)를 평가하여 4를 반환한다.
  • 비엄격 평가
  • 함수형 프로그래밍 언어에서 채택
  • 정규 순서 평가는 중복 평가로 인해 의미없는 비용을 발생시킬 수 있다.

Reference

Original

Additional