Home 함수형 프로그래밍 - Partial, Currying
Post
Cancel

함수형 프로그래밍 - Partial, Currying

number의 부재

1
2
3
4
5
6
7
8
9
10
11
12
<A,B>(oa: Option<A>, f: (a: A) => B)

Option<B>

// Array의map
(arr: Array<A>, f: (a: A) => B) => Array<B>

// Option의map
(oa: Option<A>, f: (a: A) => B) => Option<B>

// functor의 map
// f에의해내부의값은변경되어도구조는변경되지않는다.
  • 함수를 인자로 받는 고차 함수
1
2
3
4
5
                              // 함수를 인자로
const map = <A, B>(oa: Option<A>, f: (a: A) => B){
  if(isNone(oa)) return oa;
  return some(f(oa.value));
}
  • 함수를 반환하는 고차 함수
1
2
3
4
5
6
const add = (a: number) => (b: number) => a + b;
const add3 = add(3);
// (b) => 3 + b 함수를 반환

add3(4); // 3 + 4 = 7
add3(5); // 3 + 5 = 8

부분 함수

매개변수로 가능한 값들 중에 일부 경우에만 반환값이 있는 함수

부분 적용

여러 매개변수를 받는 함수에 일부 인자만 미리 적용해서, 나머지 인자를 받는 함수 만들기

부분 함수와 전혀 다르고 커링과 비슷

1
2
3
(a:A, b: B, c: C) => D

(a: A, b: B) => (c: C) => D

커링

여러 매개변수를 받는 함수를 한 개의 인자만 받는단 인자 함수들의 함수열로 만들기

1
2
3
(a:A, b:B, c:C) => D

(a: A) => (b: B) => (c: C) => D

Partial Application 부분적용이란?

인자가 여러 개인 함수의 전체 인자 중에 인자 몇 개를 고정하여 더 작은 개수의 인자를 가지는 또 다른 함수를 생성하는 프로세스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const delivery = (present: string, from: string, to: string): string => {
  return `보내는물건: ${present}보내는사람:${from}받는사람:${to}`;
};

// 만약 "첵", "어머니"가 반복된다면
console.log(deliver(, 어머니, 아들))
console.log(deliver(, 어머니, ))

const delivery = (present: string, from: string) => (to: string) => {
  return `보내는물건: ${present}보내는사람:${from}받는사람:${to}`;
};

const momsPresent = deliver(, 어머니);
console.log(momsPresent(아들))
console.log(momsPresent())

Currying 커링

인자가 여러 개인 함수를 인자가 하나인 함수들의 함수열(sequence of functions)로 만들기

1
2
3
4
5
6
// 인자가여러개인함수:
(A, B, C) => D

//커링을적용curry((A, B, C) => D)

curried function: (A) => (B) => (C) => D
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const delivery = (present: string) => (from: string) => (to: string) => {
  return `보내는물건: ${present}보내는사람:${from}받는사람:${to}`;
};

const giveBook = deliver()
const momsPresent = giveBook(어머니);
console.log(momsPresent(아들))
console.log(momsPresent())

const currying3 = <A, B, C, D>(f: (a: A, b: B, c: C) => D) => (a: A) => (
  b: B
) => (c: C) => f(a, b, c);

const curriedDelivery = currying3(delivery);

export const main = () => {
  console.clear();

  const momsPresent = curriedDelivery("상품권")("엄마");
  console.log(momsPresent("아들"));
};
This post is licensed under CC BY 4.0 by the author.

함수형 프로그래밍 - Option 없을 수도, 실패할 수도 있는 값

함수형 프로그래밍 - map