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