CSharp/Functional Programming(10)
-
Quasigroups (유사군)
추상대수학과 범주론에서 유사군은 왼쪽 나눗셈과 오른쪽 나눗셈을 정의할 수 있는 이항 연산을 갖춘 대수 구조이다. 군의 개념의 일반화이다. (위키백과) 임이의 마그마에서 각 원소 a,b∈S 에 대하여 다음을 만족하는 원소 p,q∈Sp,q∈S 가 유일하게 존재하면 이것을 Quasigroups(유사군) 이라고 한다. a∗p=b q∗a=b 뺄셈은 Quasigroups 에 속한다. Inversion (반전) public void SubtractionIsInvertible(int a, int b) { var x = a - b; var y = a + b; Console.WriteLine(a - x == b); Console.WriteLine(y - a == b); } No Identity 뺄셈은 항등원이 없다. 3 ..
2022.09.23 -
Monoid
https://blog.ploeh.dk/2017/10/06/monoids/ Monoids Introduction to monoids for object-oriented programmers. This article is part of a larger series about monoids, semigroups, and related concepts. In this article, you'll learn what a monoid is, and what distinguishes it from a semigroup. Monoids form a sub blog.ploeh.dk Monoids 는 Semigroups 의 하위 집합이다. Monoids를 관리하는 규칙은 Semigroups에 대한 규칙보다 더 엄격하다...
2022.09.22 -
Semigroup
지난 시간에 Magma 에 대해 알아 보았다. https://yogingang.tistory.com/366 자 Magma 는 덧셈 또는 뺄셈과 같이 동작한 후 Magma 의 모든 요소가 여전히 동일한 유형임을 보장하는 집합이다. 그렇다면 Semigroup란 무엇인가? Semigroup 이 되려면 위 그림에서 보았듯이 일단 Magma 의 조건을 만족해야 한다. 그리고 다음 규칙이 추가 된다. a, b 및 c 가 집한 S 의 구성원이고 ● 가 이진 연산일 경우 (a●b)●c 는 a●(b●c) 와 같아야 한다. 그리고 두 결과 모두 S 의 구성원 이어야 한다. Semigroup: a ∈ S, b ∈ S, c ∈ S --> (a·b)·c = a·(b·c) ∈ S 이러한 조건을 FP 세게에서는 연관성(associ..
2022.09.21 -
Magma
이제 조금더 functional 한 개념에 대해 정의 해보겠다. 그전에 잠깐.... functional programming 을 해본적이 없는 사람들이 볼때 위에 내역들은 정말 생소해 보인다. 도대체 왜 이렇게 어려운 단어들을 사용하는 거야? 라고 할 수도 있다. 정말 그럴까? 아래를 한번 보자 Class, private, public, protected, Pure Virtual Function, Garbage Collector SOLID pattern, Visitor, Decorator, Override, Overload, Extends, Implements, MVVM, MVP, MVC, Dependency Injection, Inversion of Control, Inheritance, Polymop..
2022.09.20 -
순수 함수 (Pure Function)
동일한 input 에 대해 항상 같은 값을 output 하는 함수 매개변수가 같다면 return 값이 항상 같은 함수를 말한다. 특징 side effect 가 없다. side effect 란 함수 내에서 함수 외부와의 모든 상호 작용, 함수 외부 변수를 변경하거나 다른 함수를 호출 하는 것. 일관성이 있다. 결과는 입력값에 의해서만 결정된다. side effect 의 예 전역 상태 변경 – 예를 들어 인스턴스 필드. 인수 또는 외부 변수 변경. I/O 또는 HTTP 요청을 수행. 현재 시간을 가져오는 것. 아래 method 는 pure function 의 예이다. private string Hello(string name) => $"Hello, {name}"; // pure function Hello f..
2022.09.19 -
Expression, Method chaining with Extension methods
Expression Expression 은 상태를 변경하지 않고 값을 생성한다. Statements 은 작업을 정의하고 side effect 가 있다. Functional 에서는 상태를 변경하지 않고 side effect 가 없어야 한다. 그러므로 Statements 보다 Expression 을 선호 한다. 그렇다면 Statements 란 무엇이고 Expression 이란 무엇일까? C# 으로 예를 들어보겠다. int i; // declaration statement i = 12; // assignment statement var increment = () => i + 1; // i + 1 is expression int[] nums = { 1, 2, 3 }; // foreach statement blo..
2022.09.16