SlideShare a Scribd company logo
Funtional
Programming
FP, lazy evaluation
FP, lazy evaluation
FP, 오늘은 조금만..
FP가 되려면
• No mutable data(no side effect)

• No state (no implicit, hidden state)
어떤게 좋을까요
• 참조 투명성(Referential transparency)

• 추론하기 쉽다. 

• 느슨히 결합된 모듈이나 쓰레드간 객체를 안전하게 공유

• 모듈성과 재사용성이 높다. 

• 테스트하기 쉽다.
함수형 사고하기
• 왜 함수형 언어를 사용해야 할까?

• 패러다임 전환

• 언어 트렌드에 발 맞추기

• 언어/런타임에 제어를 양도하기

• 간결함
Functional thinking 중…
패러다임전환

- 단순함이 쉬움을 낳는다.

- map이나 filter같은 고계함수로 추상화
단계를 높여서 문제를 명료하게 한다.

언어 트렌드

- 메모제이션, 람다의 사용

- C++에도 2011년 표준에서 람다블록을
사용
오늘 이야기 할 내용
Lazy Evaluation
알고보면 주영님의 유산 generator도 같은 개념
필요할때 계산하고 사용하는 것들
Eager vs Lazy Evaluation
• Eager evaluation 

• 조급한 계산법(Eager evaluation) 

또는 엄격한 계산법(strict evaluation)

• 조급한 계산법에서 수식은 변수에 접근하는 순간 계산된다. 이것
은 저수준 전략으로 간단한 프로그래밍 언어에서는 일반적으로
더 효율적인 방법이다. 계산되지 않은 수식을 표시하는 중간 자
료 구조를 생성하고 관리할 필요가 없기 때문이다.
Eager vs Lazy Evaluation
• Lazy evaluation 

• 계산의 결과값이 필요할 때까지 늦추는 방법

• 느긋하게 계산하면 ? 

• 필요없는 계산을 하지 않으므로 실행을 더 빠르게 할 수 있고

• 복합 수식을 계산할 때 오류 상태를 피할 수 있고 

• 무한 자료 구조를 쓸 수 있고 

• 미리 정의된 것을 이용하지 않고 보통 함수로 제어 구조를 정의할 수 있다.

• 메모리 효율, CPU 효율
Eager vs Lazy Evaluation
• 흔히 사용하는 evaluation strategy

• By-Name

• 필요할 때까지 지연되고 계산은 사용 될 때마다 반복됩니다.

• By-Need

• 값 계산은 필요할 때까지 지연된 다음 결과가 후속 용도로 캐
시됩니다.
Lazy Evaluation
Call by Name
x + 10
= i + j + 10
= 10 + 5 + 10
= 25
x
= i + j
= 200 + 20
= 220
Lazy Evaluation
x + 10
= (param x) + 10
= (15) + 10
= 25
x
= (pram x)
= 15
Call by Need
Memoization
Tail Recursive
오늘 우리가 한번 맛 볼 것은?
Tail Call
FP, lazy evaluation
FP, lazy evaluation
FP, lazy evaluation
FP, lazy evaluation
https://play.golang.org/p/sGcz4Jzm7w4
FP, lazy evaluation
FP, lazy evaluation
다음 발표는 아마…
FP, lazy evaluation
FP, lazy evaluation
제가 아닐거예요..
감사합니다.

More Related Content

PDF
Why Functional Programming Matters
PPTX
Functional Programming 01
PPTX
알고리즘
PPTX
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
PPTX
알고리즘 문제해결전략 #1
PDF
(책 소개) 쏙쏙 들어오는 인공지능 알고리즘
PDF
JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...
PDF
함수형 프로그래밍
Why Functional Programming Matters
Functional Programming 01
알고리즘
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
알고리즘 문제해결전략 #1
(책 소개) 쏙쏙 들어오는 인공지능 알고리즘
JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...
함수형 프로그래밍

Similar to FP, lazy evaluation (20)

PDF
About Functional Programming Paradigms
PDF
함수형 프로그래밍
PDF
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
PDF
20231130 LLM이 걸어온 길과 앞으로의 활약 분야 - CoT기반 Autonomous Agents를 위한 한국어 Explanation...
PDF
[D2]pinpoint 개발기
PDF
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
PDF
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
PDF
201803 파이썬 세미나
PDF
Concurreny programming
PDF
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
PDF
100% Serverless big data scale production Deep Learning System
PPTX
멸종하는 공룡이 되지 않으려면
PPTX
Spark machine learning & deep learning
PPTX
3팀_객체지향 프로그래밍.pptx
PDF
SK planet Streaming system
PDF
프로젝트 관리 및 지켜야 할 사항들
PDF
Transfer learning usage
PPTX
강화학습 & Unity ML Agents
PPTX
배포
PDF
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
About Functional Programming Paradigms
함수형 프로그래밍
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
20231130 LLM이 걸어온 길과 앞으로의 활약 분야 - CoT기반 Autonomous Agents를 위한 한국어 Explanation...
[D2]pinpoint 개발기
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
201803 파이썬 세미나
Concurreny programming
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
100% Serverless big data scale production Deep Learning System
멸종하는 공룡이 되지 않으려면
Spark machine learning & deep learning
3팀_객체지향 프로그래밍.pptx
SK planet Streaming system
프로젝트 관리 및 지켜야 할 사항들
Transfer learning usage
강화학습 & Unity ML Agents
배포
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
Ad

FP, lazy evaluation

  • 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
  • 14. Tail Recursive 오늘 우리가 한번 맛 볼 것은? Tail Call