97

Functional programming

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Functional programming
Page 2: Functional programming

NewHeart

서승현

Functional Programming and

Tail Recursion

Page 3: Functional programming

Contents

1. Functional Programming

2. Features

3. Tail Recursion

4. Q&A

Page 4: Functional programming

Functional Programming

Object-Oriented Programming Procedural Programming

Page 5: Functional programming

Object-Oriented Programming

Page 6: Functional programming

Object-Oriented Programming

Page 7: Functional programming

모든 것은 객체다

Object-Oriented Programming

Page 8: Functional programming

모든 것은 객체다

Object-Oriented Programming

추상화

Page 9: Functional programming

Functional Programming

Page 10: Functional programming

모든 것은 함수다

Functional Programming

추상화

Page 11: Functional programming

Functional Programming

Page 12: Functional programming

Functional Programming

모든 것은 수학적인 함수다

Page 13: Functional programming

모든 것은 수학적인 함수다

Functional Programming

Page 14: Functional programming

Functional Programming

참조적 투명성

모든 것은 수학적인 함수다

Page 15: Functional programming

Procedural Programming

Referential Transparency

Page 16: Functional programming

Referential Transparency

Page 17: Functional programming

Mathematics

Referential Transparency

Page 18: Functional programming

Referential Transparency

𝒇 𝒙 = 𝒙𝟐 + 𝒙 + 𝟏

𝒌 = 𝟏 𝒙 = 𝒌 + 𝒇 𝒌 𝒚 = 𝒌 + 𝒇 𝒌

𝒙 = 𝒚?

Page 19: Functional programming

참조적 투명성

Functional Programming

Page 20: Functional programming

참조적 투명성

Functional Programming

상태에 영향을 받지 않는다

Page 21: Functional programming

모든 것은 수학적인 함수다

Functional Programming

Page 22: Functional programming

1. Type Inference

2. List Processing

3. Pure Function

4. Non-Strict Evaluation

5. First-Class Function

6. Recursion

Features

Page 23: Functional programming

Ocaml

Page 24: Functional programming

1. Type Inference

2. List Processing

3. Pure Function

4. Non-Strict Evaluation

5. First-Class Function

6. Recursion

Features

Page 25: Functional programming

Ocaml Primitive Types

int

float

char

string

bool

unit

2, -2, …

2.0, -2.0, …

‘2’, ‘b’, …

“”, “22”, …

true, false

()

Page 26: Functional programming

Type Inference

Page 27: Functional programming

Type Inference

Page 28: Functional programming

Type Inference

Javascript

Page 29: Functional programming

Type Inference

Javascript Ocaml

Page 30: Functional programming

Type Inference

Page 31: Functional programming

1. Type Inference

2. List Processing

3. Pure Function

4. Non-Strict Evaluation

5. First-Class Function

6. Recursion

Features

Page 32: Functional programming

List Processing

Page 33: Functional programming

List Processing

Page 34: Functional programming

List Processing

Page 35: Functional programming

1. Type Inference

2. List Processing

3. Pure Function

4. Non-Strict Evaluation

5. First-Class Function

6. Recursion

Features

Page 36: Functional programming

Pure Function

Page 37: Functional programming

Function

Page 38: Functional programming

Function

Javascript

Page 39: Functional programming

Function

Javascript Ocaml

Page 40: Functional programming

Function

Page 41: Functional programming

Currying

Page 42: Functional programming

Currying

Page 43: Functional programming

Referential Transparency

C++

Page 44: Functional programming

Referential Transparency

C++ Ocaml

Page 45: Functional programming

Referential Transparency

Ocaml Javascript

Page 46: Functional programming

Referential Transparency

Page 47: Functional programming

1. Type Inference

2. List Processing

3. Pure Function

4. Non-Strict Evaluation

5. First-Class Function

6. Recursion

Features

Page 48: Functional programming

Short-Circuit Evaluation

Page 49: Functional programming

Short-Circuit Evaluation

Page 50: Functional programming

Short-Circuit Evaluation

Page 51: Functional programming

Non-Strict Evaluation

length [0/0, 1/0, 2/0]

Page 52: Functional programming

Non-Strict Evaluation

length [0/0, 1/0, 2/0]

Page 53: Functional programming

Non-Strict Evaluation

length [0/0, 1/0, 2/0]

Page 54: Functional programming

Non-Strict Evaluation

length [0/0, 1/0, 2/0]

Page 55: Functional programming

Non-Strict Evaluation

Page 56: Functional programming

Non-Strict Evaluation

Page 57: Functional programming

1. Type Inference

2. List Processing

3. Pure Function

4. Non-Strict Evaluation

5. First-Class Function

6. Recursion

Features

Page 58: Functional programming

First-Class Function

1. 함수를 인자로서 넘길 수 있다

2. 함수를 값으로서 반환할 수 있다

3. 익명 함수와 중첩 함수

4. 변수에 함수를 대입할 수 있다

5. 비지역 변수와 클로져

Page 59: Functional programming

Passing Functions as Arguments

Page 60: Functional programming

Passing Functions as Arguments

Page 61: Functional programming

Passing Functions as Arguments

Page 62: Functional programming

First-Class Function

1. 함수를 인자로서 넘길 수 있다

2. 함수를 값으로서 반환할 수 있다

3. 익명 함수와 중첩 함수

4. 변수에 함수를 대입할 수 있다

5. 비지역 변수와 클로져

Page 63: Functional programming

Returning Functions as Results

Page 64: Functional programming

Returning Functions as Results

Page 65: Functional programming

Returning Functions as Results

Page 66: Functional programming

First-Class Function

1. 함수를 인자로서 넘길 수 있다

2. 함수를 값으로서 반환할 수 있다

3. 익명 함수와 중첩 함수

4. 변수에 함수를 대입할 수 있다

5. 비지역 변수와 클로져

Page 67: Functional programming

Anonymous and Nested Functions

Page 68: Functional programming

First-Class Function

1. 함수를 인자로서 넘길 수 있다

2. 함수를 값으로서 반환할 수 있다

3. 익명 함수와 중첩 함수

4. 변수에 함수를 대입할 수 있다

5. 비지역 변수와 클로져

Page 69: Functional programming

First-Class Function

1. 함수를 인자로서 넘길 수 있다

2. 함수를 값으로서 반환할 수 있다

3. 익명 함수와 중첩 함수

4. 변수에 함수를 대입할 수 있다

5. 비지역 변수와 클로져

Page 70: Functional programming

Non-local Variables and Closures

Page 71: Functional programming

First-Class Function

1. 함수를 인자로서 넘길 수 있다

2. 함수를 값으로서 반환할 수 있다

3. 익명 함수와 중첩 함수

4. 변수에 함수를 대입할 수 있다

5. 비지역 변수와 클로져

Page 72: Functional programming

1. Type Inference

2. List Processing

3. Pure Function

4. Non-Strict Evaluation

5. First-Class Function

6. Recursion

Features

Page 73: Functional programming

Recursion

Page 74: Functional programming

Recursion

Page 75: Functional programming

1. Type Inference

2. List Processing

3. Pure Function

4. Non-Strict Evaluation

5. First-Class Function

6. Recursion

Features

Page 76: Functional programming

Tail Recursion

1. Tail Recursion Optimization

2. Tail Recursion by Accumulator

3. Continuation-Passing Style

Page 77: Functional programming

Stack Overflow

Page 78: Functional programming

Tail Recursion

Page 79: Functional programming

Tail Recursion Optimization

Page 80: Functional programming

Tail Recursion Optimization

Page 81: Functional programming

Tail Recursion

Page 82: Functional programming

Tail Recursion by Accumulator

Page 83: Functional programming

Tail Recursion Optimization

Before After

Page 84: Functional programming

Tail Recursion Optimization

Before After

Page 85: Functional programming

Tail Recursion by Accumulator

Page 86: Functional programming

Tail Recursion by Accumulator

Page 87: Functional programming

Continuation-Passing Style

Page 88: Functional programming

Continuation-Passing Style

Page 89: Functional programming

Direct Style

Page 90: Functional programming

Direct Style

Page 91: Functional programming

Continuation-Passing Style

Page 92: Functional programming

Continuation-Passing Style

Page 93: Functional programming

Continuation-Passing Style

Page 94: Functional programming

Continuation-Passing Style

Page 95: Functional programming

Continuation-Passing Style

1. 꼬리 재귀 최적화

2. 비동기 호출의 실행 순서 보장

3. 에러 분기 제어

Page 96: Functional programming

Tail Recursion

1. Tail Recursion Optimization

2. Tail Recursion by Accumulator

3. Continuation-Passing Style

Page 97: Functional programming

Q&A