Functional programming

Preview:

DESCRIPTION

 

Citation preview

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

Recommended