빅 데이터 관점에서 비롯됩니다. 기본적으로 많은 프레임 워크 (Apache Spark와 같은)는 Functor / Monad와 같은 인터페이스를 제공하여 관계형 작업의 부족을 "보상"하고 cats-to-SQL 변환 (Slick in Scala)으로 유사한 움직임이 있습니다. 예를 들어, SQL 관점에서 벡터의 요소 별 곱셈을 위해서는 자연스런 조인 (인덱스에 대한 반복이 없다고 가정)이 필요 합니다. 이는 범주 이론의 응용 프로그램에서 zip + map(multiply)
(Spark의 MLib, 그러나 이미 가지고 있음 ElementwiseProduct
) 으로 간주 될 수 있습니다 .
간단히 말해서 (다음 예는 스칼라에 있습니다) :
조인의 참조 subcase가 나아가서 우리를 제공 실용적 펑 (이상 분류 컬렉션)으로 생각 될 수있다
zip
:List(1,2,3).ap(List(2,4,8).map(a => (b: Int) => a * b))
->(List(1,2,3) zip List(2,4,8)).map(x => x._1 * x._2)
. 또한 일부 전처리 (groupBy
작업자 또는 단순히 노출 또는 일반적으로-변신)를 가정하여 다른 조인에 유도 할 수 있습니다 .다른 조인 및 선택은 모나드로 간주 될 수 있습니다. 예를 들어 다음과
WHERE
같습니다List(1,2,2,4).flatMap(x => if (x < 3) List(x) else List.empty)
.->List(1,2,2,4).filter(_ < 3)
데이터 자체는 ADT (GADT도?)이며, 간단한 Set-category (또는 일반적으로 말하기-직교-닫힘)처럼 보이므로 Set-based 작업 (Curry- Howard-Lambek 자체)와 같은 작업
RENAME
(적어도 실제로는).집계는
fold/reduce
(변형)에 해당
그래서 내가 묻는 것은 범주 이론과 (전체) 관계 대수 사이에 동형을 형성 할 수 있습니까? 아니면 밝혀지지 않은 것이 있습니까? 그것이 효과가 있다면, 범주의 어떤 "소 집합"이 대뇌에 동형 인 것입니까?
로직 캣 람다에 대한 Curry-Howard-Lambek 과 같은 공식 솔루션 이 더 정확한 반면 내 가정은 상당히 광범위하다는 것을 알 수 있습니다. 실제로, 나는 성공적인 연구에 대한 참조를 요구하고 있습니다 (직접적인 관계를 보여줍니다) 스칼라 / 하스켈에 더 많은 예제가 있습니다.
편집 : 허용 된 대답으로 인해 조인과 조건을 모나드로 표현하기에 너무 멀리 갔다고 생각합니다 (특히 FALSE를 효과적으로 인스턴스화하는 빈 값 사용). SQL의 관계 하위 집합에 대해 풀백으로 충분하다고 생각합니다. 모나드는 GROUP BY와 같은 고차 (중첩) 물건에 더 좋습니다.