옆히
함수형 프로그래밍 본문
함수형 프로그래밍 - 잭 위드먼 지음, 이진호.한용진 옮김/에이콘출판 |
합성, 커링, 모나드에 대해 훑어보는 함수형 프로그래밍 입문 (youtube.com)
모나드와 함수형 아키텍처 | Dable Tech Blog (teamdable.github.io)
함수를 '값'처럼 보기, 모나드 -> 부수 효과를 입출력과 함께 포장하여 함수를 순수 함수로 바꾸는 디자인 패턴(C#으로 치면 LINQ)
동시성을 고려하는 환경이면 함수형 프로그램이 필요함
펑터, map, curry(입력 매개변수가 여러개인 함수를 한개인 함수로 쪼개어 합성하기 편하게 가공함)
#변화하는(mutable) 상태를 관리하기보다 변화를 허용하지 않는 것이 함수형 프로그램의 기본 원칙이다.
Every expression is return value
#함수형 프로그래밍에서 모든 함수는 값을반환해야 한다. void는 부작용이 발생할 것이라는 확실한 신호다.
#함수형 프로그래밍의 특징
- 불변성(immutability): 변수는 한 번 설정되면 값을 변경할 수 없다.
- 참조 투명성(referential transparency): 동일한 입력에 대해 항상 동일한 출력이 나오는 함수의 특성
- 고차 함수(higher order function): 다른 함수를 파라미터로 받거나 함수를 반환하는 함수.
- 지연 평가(lazy evaluation): 표현식이 필요할 때만 평가됨 (cf. 즉시 평가(eager evaluation))
#순수 함수: 입력을 받아 출력을 반환하는 함수이다. 별도의 부수 효과가 발생하지 않는다. 함수 외부의 변수는 수정하지 않으며 파일에 쓰거나 예외를 발생시키지 않는다. 단순히 입력을 받고 출력을 반환한다. 동일한 입력을 제공하면 동일한 출력값이 반환된다.
#함수를 한 번만 호출해야 하는 경우 익명 함수(anonymous function) 사용(lamda function 이라고 부르기도 함)
#함수형 프로그래밍 언어를 통해 함수를 일급 객체(first class object)로 생각하면 함수를 쉽게 다룰 수 있다. 이것은 다른 객체나 변수로 할 수 있는 모든 것은 함수로도 할 수 있음을 의미한다.
#펑터(fnctor, 함자): 프로그래밍 언어 용어에에서 펑터란 단순히 map 메서드를 구현하는 인터페이스다.
펑터는 함수형 프로그래밍에서 map 함수를 구현하는 타입이 있는 모든 곳에서 나타난다. 펑터를 매핑 가능한 트레잇(trait) 또는 (java의) 인터페이스)으로 생각하자.
#엔도펑터(endofuntor): 자체적으로 범주 이동 가능; 모든 엔도 펑터는 펑터임
#펑터 패턴
- 펑터는 항상 map 함수를 갖고 있다.
- 펑터는 항상 합성될 수 있다.
#반군(semogroup): 결합적인 이항 연산을 갖는 비어 있지 않은 집합
#모노이드(monoid): 반군이 존재하는 모든 원소 x에 대해 e * x = x * e = x인 항등원 e를 가질 때 모노이드라고 부름
범주 C에서 범주 C로 가는 사상이 존재한다고 가정하자. 이러한 사상을 자연 변환(natural transformation)이라고 한다.
foldleft
튜플(Tuple): 튜플은 여러 요소들의 집합으로, 순서가 있고 변경할 수 없는(immutable) 자료형입니다. 일반적으로 원소들은 다양한 데이터 타입일 수 있습니다.
꼬리 재귀 최적화 (Tail Recursion Optimization)
abstract class Functor<T>
{
public abstract Func<U> lift<U>(Func<T, U> f);
}
'개인공부용1 > cs' 카테고리의 다른 글
디자인 패턴의 아름다움 (0) | 2024.07.14 |
---|---|
시작하세요! C# 12 프로그래밍 - 2부 (0) | 2024.07.14 |
정규표현식 (0) | 2024.07.11 |
혼자 공부하는 컴퓨터 구조 + 운영체제 (1) | 2024.06.18 |
Bresenham's line algorithm (0) | 2024.02.07 |