우선 monoid 의 수학적 정의를 살펴보자.
아래의 3가지를 모두 만족 한다면 '집합 S 를 항등원이 e 인 ⊗ 연산에 대해서 monoid' 라고 한다.
1. 집합 S 에 속한 모든 a 와 b 에 대해 a ⊗ b 가 정의되고 이 결과 또한 집합 S 에 속한다.
2. 집합 S 에 속한 모든 a 와 b, c 에 대해 (a ⊗ b) ⊗ c = a ⊗ (b ⊗ c) 가 성립한다. (결합 법칙)
3. 집합 S 에 속한 원소 e 에 대해 집합 S 에 속한 모든 a 는 a ⊗ e = e ⊗ a = a 가 성립한다.
따라서 monoid 라면 대(big) operator 개념을 생각해볼 수 있다.
이걸 응용한 python 시퀀스에 대한 대(big) operator 구현이
map / filter / functools.reduce 등등이다.
my_sum = lambda S: functools.reduce(lambda x, y: x + y, S, 0)
my_product = lambda S: functools.reduce(lambda x, y: x * y, S, 1)
my_cat = lambda S: functools.reduce(lambda x, y: x + y, S, "")