5. FP가 되려면
• No mutable data(no side effect)
• No state (no implicit, hidden state)
6. 어떤게 좋을까요
• 참조 투명성(Referential transparency)
• 추론하기 쉽다.
• 느슨히 결합된 모듈이나 쓰레드간 객체를 안전하게 공유
• 모듈성과 재사용성이 높다.
• 테스트하기 쉽다.
7. 함수형 사고하기
• 왜 함수형 언어를 사용해야 할까?
• 패러다임 전환
• 언어 트렌드에 발 맞추기
• 언어/런타임에 제어를 양도하기
• 간결함
Functional thinking 중…
패러다임전환
- 단순함이 쉬움을 낳는다.
- map이나 filter같은 고계함수로 추상화
단계를 높여서 문제를 명료하게 한다.
언어 트렌드
- 메모제이션, 람다의 사용
- C++에도 2011년 표준에서 람다블록을
사용
8. 오늘 이야기 할 내용
Lazy Evaluation
알고보면 주영님의 유산 generator도 같은 개념
필요할때 계산하고 사용하는 것들
9. Eager vs Lazy Evaluation
• Eager evaluation
• 조급한 계산법(Eager evaluation)
또는 엄격한 계산법(strict evaluation)
• 조급한 계산법에서 수식은 변수에 접근하는 순간 계산된다. 이것
은 저수준 전략으로 간단한 프로그래밍 언어에서는 일반적으로
더 효율적인 방법이다. 계산되지 않은 수식을 표시하는 중간 자
료 구조를 생성하고 관리할 필요가 없기 때문이다.
10. Eager vs Lazy Evaluation
• Lazy evaluation
• 계산의 결과값이 필요할 때까지 늦추는 방법
• 느긋하게 계산하면 ?
• 필요없는 계산을 하지 않으므로 실행을 더 빠르게 할 수 있고
• 복합 수식을 계산할 때 오류 상태를 피할 수 있고
• 무한 자료 구조를 쓸 수 있고
• 미리 정의된 것을 이용하지 않고 보통 함수로 제어 구조를 정의할 수 있다.
• 메모리 효율, CPU 효율
11. Eager vs Lazy Evaluation
• 흔히 사용하는 evaluation strategy
• By-Name
• 필요할 때까지 지연되고 계산은 사용 될 때마다 반복됩니다.
• By-Need
• 값 계산은 필요할 때까지 지연된 다음 결과가 후속 용도로 캐
시됩니다.
12. Lazy Evaluation
Call by Name
x + 10
= i + j + 10
= 10 + 5 + 10
= 25
x
= i + j
= 200 + 20
= 220
13. Lazy Evaluation
x + 10
= (param x) + 10
= (15) + 10
= 25
x
= (pram x)
= 15
Call by Need
Memoization