SlideShare a Scribd company logo
1 of 97
Download to read offline
NewHeart
서승현
Functional Programming
and
Tail Recursion
Contents
1. Functional Programming
2. Features
3. Tail Recursion
4. Q&A
Functional Programming
Object-Oriented Programming Procedural Programming
Object-Oriented Programming
Object-Oriented Programming
모든 것은 객체다
Object-Oriented Programming
모든 것은 객체다
Object-Oriented Programming
추상화
Functional Programming
모든 것은 함수다
Functional Programming
추상화
Functional Programming
Functional Programming
모든 것은 수학적인 함수다
모든 것은 수학적인 함수다
Functional Programming
Functional Programming
참조적 투명성
모든 것은 수학적인 함수다
Procedural Programming
Referential Transparency
Referential Transparency
Mathematics
Referential Transparency
Referential Transparency
𝒇 𝒙 = 𝒙 𝟐
+ 𝒙 + 𝟏
𝒌 = 𝟏
𝒙 = 𝒌 + 𝒇 𝒌
𝒚 = 𝒌 + 𝒇 𝒌
𝒙 = 𝒚?
참조적 투명성
Functional Programming
참조적 투명성
Functional Programming
상태에 영향을 받지 않는다
모든 것은 수학적인 함수다
Functional Programming
1. Type Inference
2. List Processing
3. Pure Function
4. Non-Strict Evaluation
5. First-Class Function
6. Recursion
Features
Ocaml
1. Type Inference
2. List Processing
3. Pure Function
4. Non-Strict Evaluation
5. First-Class Function
6. Recursion
Features
Ocaml Primitive Types
int
float
char
string
bool
unit
2, -2, …
2.0, -2.0, …
‘2’, ‘b’, …
“”, “22”, …
true, false
()
Type Inference
Type Inference
Type Inference
Javascript
Type Inference
Javascript Ocaml
Type Inference
1. Type Inference
2. List Processing
3. Pure Function
4. Non-Strict Evaluation
5. First-Class Function
6. Recursion
Features
List Processing
List Processing
List Processing
1. Type Inference
2. List Processing
3. Pure Function
4. Non-Strict Evaluation
5. First-Class Function
6. Recursion
Features
Pure Function
Function
Function
Javascript
Function
Javascript Ocaml
Function
Currying
Currying
Referential Transparency
C++
Referential Transparency
C++ Ocaml
Referential Transparency
OcamlJavascript
Referential Transparency
1. Type Inference
2. List Processing
3. Pure Function
4. Non-Strict Evaluation
5. First-Class Function
6. Recursion
Features
Short-Circuit Evaluation
Short-Circuit Evaluation
Short-Circuit Evaluation
Non-Strict Evaluation
length [0/0, 1/0, 2/0]
Non-Strict Evaluation
length [0/0, 1/0, 2/0]
Non-Strict Evaluation
length [0/0, 1/0, 2/0]
Non-Strict Evaluation
length [0/0, 1/0, 2/0]
Non-Strict Evaluation
Non-Strict Evaluation
1. Type Inference
2. List Processing
3. Pure Function
4. Non-Strict Evaluation
5. First-Class Function
6. Recursion
Features
First-Class Function
1. 함수를 인자로서 넘길 수 있다
2. 함수를 값으로서 반환할 수 있다
3. 익명 함수와 중첩 함수
4. 변수에 함수를 대입할 수 있다
5. 비지역 변수와 클로져
Passing Functions as Arguments
Passing Functions as Arguments
Passing Functions as Arguments
First-Class Function
1. 함수를 인자로서 넘길 수 있다
2. 함수를 값으로서 반환할 수 있다
3. 익명 함수와 중첩 함수
4. 변수에 함수를 대입할 수 있다
5. 비지역 변수와 클로져
Returning Functions as Results
Returning Functions as Results
Returning Functions as Results
First-Class Function
1. 함수를 인자로서 넘길 수 있다
2. 함수를 값으로서 반환할 수 있다
3. 익명 함수와 중첩 함수
4. 변수에 함수를 대입할 수 있다
5. 비지역 변수와 클로져
Anonymous and Nested Functions
First-Class Function
1. 함수를 인자로서 넘길 수 있다
2. 함수를 값으로서 반환할 수 있다
3. 익명 함수와 중첩 함수
4. 변수에 함수를 대입할 수 있다
5. 비지역 변수와 클로져
First-Class Function
1. 함수를 인자로서 넘길 수 있다
2. 함수를 값으로서 반환할 수 있다
3. 익명 함수와 중첩 함수
4. 변수에 함수를 대입할 수 있다
5. 비지역 변수와 클로져
Non-local Variables and Closures
First-Class Function
1. 함수를 인자로서 넘길 수 있다
2. 함수를 값으로서 반환할 수 있다
3. 익명 함수와 중첩 함수
4. 변수에 함수를 대입할 수 있다
5. 비지역 변수와 클로져
1. Type Inference
2. List Processing
3. Pure Function
4. Non-Strict Evaluation
5. First-Class Function
6. Recursion
Features
Recursion
Recursion
1. Type Inference
2. List Processing
3. Pure Function
4. Non-Strict Evaluation
5. First-Class Function
6. Recursion
Features
Tail Recursion
1. Tail Recursion Optimization
2. Tail Recursion by Accumulator
3. Continuation-Passing Style
Stack Overflow
Tail Recursion
Tail Recursion Optimization
Tail Recursion Optimization
Tail Recursion
Tail Recursion by Accumulator
Tail Recursion Optimization
Before After
Tail Recursion Optimization
Before After
Tail Recursion by Accumulator
Tail Recursion by Accumulator
Continuation-Passing Style
Continuation-Passing Style
Direct Style
Direct Style
Continuation-Passing Style
Continuation-Passing Style
Continuation-Passing Style
Continuation-Passing Style
Continuation-Passing Style
1. 꼬리 재귀 최적화
2. 비동기 호출의 실행 순서 보장
3. 에러 분기 제어
Tail Recursion
1. Tail Recursion Optimization
2. Tail Recursion by Accumulator
3. Continuation-Passing Style
Q&A

More Related Content

Viewers also liked

今昔エネルギーひろば
今昔エネルギーひろば今昔エネルギーひろば
今昔エネルギーひろばN .
 
Cambodia do and don't
Cambodia do and don'tCambodia do and don't
Cambodia do and don'tHuyHuang
 
Taller+de+conversiones+bd+db (1)
Taller+de+conversiones+bd+db (1)Taller+de+conversiones+bd+db (1)
Taller+de+conversiones+bd+db (1)yeisonarley17
 
SEO. Эффективное продвижение
SEO. Эффективное продвижениеSEO. Эффективное продвижение
SEO. Эффективное продвижениеSEO_Experts
 
Watermeloons oms
Watermeloons omsWatermeloons oms
Watermeloons omsc_liberty
 
Lady rockets oms
Lady rockets omsLady rockets oms
Lady rockets omsc_liberty
 
Catalogo corsi-attrezzature-di-lavoro-lavori-in-quota-spazi-confinati-gruppo-...
Catalogo corsi-attrezzature-di-lavoro-lavori-in-quota-spazi-confinati-gruppo-...Catalogo corsi-attrezzature-di-lavoro-lavori-in-quota-spazi-confinati-gruppo-...
Catalogo corsi-attrezzature-di-lavoro-lavori-in-quota-spazi-confinati-gruppo-...Gruppo Ambiente Sicurezza
 
Coin finder oms
Coin finder omsCoin finder oms
Coin finder omsc_liberty
 
Tugas V Mektan I Redha RM
Tugas V Mektan I Redha RMTugas V Mektan I Redha RM
Tugas V Mektan I Redha RMRedha RM
 
Jennifer - Independence Declared
Jennifer - Independence DeclaredJennifer - Independence Declared
Jennifer - Independence Declaredgareth_cook
 

Viewers also liked (13)

All you need to know about WMS
All you need to know about WMSAll you need to know about WMS
All you need to know about WMS
 
今昔エネルギーひろば
今昔エネルギーひろば今昔エネルギーひろば
今昔エネルギーひろば
 
Cambodia do and don't
Cambodia do and don'tCambodia do and don't
Cambodia do and don't
 
Taller+de+conversiones+bd+db (1)
Taller+de+conversiones+bd+db (1)Taller+de+conversiones+bd+db (1)
Taller+de+conversiones+bd+db (1)
 
Bulungi Creative
Bulungi CreativeBulungi Creative
Bulungi Creative
 
SEO. Эффективное продвижение
SEO. Эффективное продвижениеSEO. Эффективное продвижение
SEO. Эффективное продвижение
 
Watermeloons oms
Watermeloons omsWatermeloons oms
Watermeloons oms
 
Lady rockets oms
Lady rockets omsLady rockets oms
Lady rockets oms
 
Catalogo corsi-attrezzature-di-lavoro-lavori-in-quota-spazi-confinati-gruppo-...
Catalogo corsi-attrezzature-di-lavoro-lavori-in-quota-spazi-confinati-gruppo-...Catalogo corsi-attrezzature-di-lavoro-lavori-in-quota-spazi-confinati-gruppo-...
Catalogo corsi-attrezzature-di-lavoro-lavori-in-quota-spazi-confinati-gruppo-...
 
Coin finder oms
Coin finder omsCoin finder oms
Coin finder oms
 
Tugas V Mektan I Redha RM
Tugas V Mektan I Redha RMTugas V Mektan I Redha RM
Tugas V Mektan I Redha RM
 
Jennifer - Independence Declared
Jennifer - Independence DeclaredJennifer - Independence Declared
Jennifer - Independence Declared
 
Circuitos mixtos
Circuitos mixtosCircuitos mixtos
Circuitos mixtos
 

Similar to Functional programming

자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 
PyconKr2018 Functional Programming
PyconKr2018 Functional ProgrammingPyconKr2018 Functional Programming
PyconKr2018 Functional Programmingwonho ha
 
Pycon2018 Functional Programming
Pycon2018 Functional ProgrammingPycon2018 Functional Programming
Pycon2018 Functional Programmingwonho ha
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기 Yong Joon Moon
 

Similar to Functional programming (6)

자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
PyconKr2018 Functional Programming
PyconKr2018 Functional ProgrammingPyconKr2018 Functional Programming
PyconKr2018 Functional Programming
 
Pycon2018 Functional Programming
Pycon2018 Functional ProgrammingPycon2018 Functional Programming
Pycon2018 Functional Programming
 
Pycon
PyconPycon
Pycon
 
Aassss
AassssAassss
Aassss
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기
 

More from NewHeart

테스트 주도 개발과 유닛 테스트 툴
테스트 주도 개발과 유닛 테스트 툴테스트 주도 개발과 유닛 테스트 툴
테스트 주도 개발과 유닛 테스트 툴NewHeart
 
ADB Backup 관련 연구
ADB Backup 관련 연구ADB Backup 관련 연구
ADB Backup 관련 연구NewHeart
 
Web framework security
Web framework securityWeb framework security
Web framework securityNewHeart
 
Smart pointer
Smart pointerSmart pointer
Smart pointerNewHeart
 
Public key
Public keyPublic key
Public keyNewHeart
 
Android App Reversing
Android App ReversingAndroid App Reversing
Android App ReversingNewHeart
 

More from NewHeart (6)

테스트 주도 개발과 유닛 테스트 툴
테스트 주도 개발과 유닛 테스트 툴테스트 주도 개발과 유닛 테스트 툴
테스트 주도 개발과 유닛 테스트 툴
 
ADB Backup 관련 연구
ADB Backup 관련 연구ADB Backup 관련 연구
ADB Backup 관련 연구
 
Web framework security
Web framework securityWeb framework security
Web framework security
 
Smart pointer
Smart pointerSmart pointer
Smart pointer
 
Public key
Public keyPublic key
Public key
 
Android App Reversing
Android App ReversingAndroid App Reversing
Android App Reversing
 

Functional programming