functional programming
DESCRIPTION
TRANSCRIPT
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
Ocaml Javascript
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