Home 함수형 프로그래밍 - Array 1
Post
Cancel

함수형 프로그래밍 - Array 1

개수를 결정할 수 없는 값들

1
2
const numbers: Array<number> = [1, 2, 3]; // 3개도가능하고
const strings: Array<string> = [hello, world]; // 2개도가능하다

비결정적인 함수

1
type filter = <A>(arr: Array<A>, pred: (x: A) => boolean) => Array<A>;

고차함수

  • 다른 함수를 매개변수로 입력받는 함수
1
2
3
4
5
6
7
type hof1 = (func: 함수, x: 인자) => B

function(func: 함수, x: 인자): B {
  
  const y = func(x)
  return y
}
  • 새로운 함수를 반환하는 함수
1
2
3
4
5
6
type hof2 = (a: A) => 함수

function(a: A): 함수 {
  
  return (b: B) => a + b
}

다른 함수를 매개변수로 입력받는 함수

  • array.map(함수)
1
2
3
4
5
6
7
export const map = <A, B>(array: Array<A>, f: (a: A) => B) => {
  const result: Array<B> = [];
  for (const value of array) {
    result.push(f(value));
  }
  return result;
};
  • array.filter(함수)
  • array.reduce(함수)

예외를 표현하는 데이터 타입

1
2
3
4
5
6
7
8
9
10
function stringToNumber(s){
  const result = Number(s);
  if (isNaN(result)){
    // 부수효과
    throw Error(s+: 숫자가아닙니다.);
  }
  return result;
}

type Try<T> = Error | T (s: string) => Try<number>

Array map의 타입 다시 보기

1
2
3
4
// 제네릭으로 구현한 map
type map<A, B> = (Array<A>, A B)  Array<B>
// 타입 파라미터 A가 number 타입이라면?
(Array<number>, number B)  Array<B>
  • 연습
1
2
3
4
5
6
7
8
9
10
11
export type MapType<A, B> = (xs: Array<A>, f: (x: A) => B) => Array<B>;
// (Array<A>, A => B) => Array<B>

export type MapType1 = MapType<number, number>;
// (Array<number>, number => string) => Array<string>

export type Compose<A, B, C> = (g: (y: B) => C, f: (x: A) => B) => (a: A) => C;
// (B => C, A => B) => A => C

export type Compose1 = Compose<string, number, boolean>;
// (number => boolean, string => number) => string => boolean
This post is licensed under CC BY 4.0 by the author.

함수형 프로그래밍 - 함수와 타입 - 2

함수형 프로그래밍 - Array 2