함수형 프로그래밍 - ChoDragon9/posts GitHub Wiki
함수형 프로그래밍
함수형 프로그래밍은 자료처리를 수학적함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍이다.
수학적 함수
함수란 두집합 X, Y에 대하여 X의 각 원소에 Y의 원소가 오직 하나씩 대응할 때, 이 대응을 X에서 Y로의 함수라고 하며, 이것을 기호로 f : X → Y
와 같이 나타낸다.
함수의 성격
- 모든 정의역은 대응되어야 한다.
- 정의역은 두개 이상의 대응은 될 수 없다.
- 공집합은 정의역과 공역이 될 수 없다.
범주론
- 수학에서 함수
- 입력과 출력이 있어야 함
- 합성이 가능해야 함
- 범주
- 객체의 집합
- 화살표
- 정의역과 치역을 가르키는 화살표
- 각 객체가 가지고 있는 항등 화살표
- 한 화살표의 치역과 다른 화살표의 정의역이 같으면 합성할 수 있음 (f ⋅ g)(x) = f(g(x))
- 컴퓨터 프로그램 재앙 4가지를 범주론 관점으로 해결
- 실패 :
A → Err(B)
, 실패의 경우를 포함하는 집합을 정의하여 해결한다.- 성공시 (f ⋅ g)(x) = f(g(x))
- 실패시 (f ⋅ g)(x) = g(x), f(g(x)) => g(x)라는 의미는 f(x) = x와 같은 항등을 의미한다.
- 의존성 :
A → Pref(B)
, 애플리케이션의 설정 집합을 정의하여 해결한다. - 불확실성 :
A → P(B)
, P는 모든 부분집합을 모은 멱집합이다. - 파괴성 :
A → IO(B)
, IO는 입력/출력을 뜻하며, 다른 세계와의 상호작용할 때 발생하는 영향을 개념화한 것이다.
- 실패 :
범주론 참고
identity 함수
https://emilvarga.com/posts/2016/08/01/using-identity-functions
함수형 프로그래밍 정리
- 함수의 시그니처
- 함수이름
- 인자 타입 목록
- 리턴 타입
- 람다 대수 : Alonzo church(알론조 처지 수학자)
- 항상 익명
- 단일 입력, 2개 이상 필요시 커링사용
- 일급함수
- 순수함수와 함수형 프로그래밍 정의
- 명령형에서 함수형으로 전환하기
- 다형성
- 지연평가
- Reduce
- Functor