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)
을 먼저 평가해 2 값을 얻는다.
- 함수 호출
h(2)
가 되어 (+ 2 2)
를 평가하게 된다.
- 결과적으로 4가 반환된다.
정규 순서 평가 (Normal-Order Evaluation)
h
가 (+ x x)
로 전개된다. ⇒ (h (+ 1 1))
→ (+ (+ 1 1) (+ 1 1))
로 바뀐다.
- 전개 후
(+ 1 1)
을 두 번 평가해야 하기 때문에 중복 평가가 발생한다.
- 최종적으로
(+ 2 2)
를 평가하여 4
를 반환한다.
- 비엄격 평가
- 함수형 프로그래밍 언어에서 채택
- 정규 순서 평가는 중복 평가로 인해 의미없는 비용을 발생시킬 수 있다.
Reference
Original
Additional