Scala의 Product 클래스에 대해 어떻게 생각해야합니까?
패키지 "scala"에는 Product, Product1, Product2 등의 여러 클래스가 Product22까지 있습니다.
이 클래스에 대한 설명은 확실히 정확합니다. 예를 들면 :
Product4 is a cartesian product of 4 components
네, 정확합니다. 의사 소통? 별로. 나는 이것이 여기에서 사용되는 "직교 적 제품"의 의미를 이미 이해하고있는 사람을위한 완벽한 표현이라고 기대합니다. 그렇지 않은 사람에게는 약간 원형으로 들립니다. "네, 물론 Product4는 4 개의 중얼 중얼 중얼 거리는 제품입니다 ."
올바른 기능적 언어 관점을 이해하도록 도와주세요. 여기서 사용되는 "직교 곱"의 의미는 무엇입니까? 제품 클래스의 "프로젝션"멤버는 무엇을 나타 냅니까?
"구성 요소가 두 세트의 구성원 인 모든 가능한 요소 쌍의 세트."
누가 그로부터 파생되는지를 아는 것이 더 나은 이해를 얻을 수 있습니다.
직접 알려진 하위 클래스 : Tuple4
또는 " 제품 확장 "을 알면 다른 클래스가 Product
자신 을 확장함으로써 사용할 수있는 것이 무엇인지 알 수 있습니다 . 하지만 여기서는 인용하지 않겠습니다. 다소 길기 때문입니다.
어쨌든 유형 A, B, C 및 D가있는 경우 Product4 [A, B, C, D]는 인스턴스가 A, B, C 및 D의 데카르트 곱의 가능한 모든 요소 인 클래스입니다. 문자 그대로.
물론 Product4가 클래스가 아니라 특성이라는 점을 제외하면. 네 가지 세트의 데카르트 곱인 클래스에 대한 몇 가지 유용한 메서드를 제공합니다.
다른 모든 사람들은 수학을 위해 갔으므로 혹시라도 어리석은 대답을 할 것입니다! 기어 박스, 스티어링 휠, 액셀러레이터 및 수많은 승객이있는 단순한 자동차가 있습니다. 이것들은 각각 다를 수 있습니다. 어떤 기어를 사용하고 있는지, 어떤 방향으로 스티어링하고 있는지, "바닥에있는"발 등이 있습니다. 따라서 기어 박스, 스티어링, 액셀러레이터 등은 변수 이며 각각 고유 한 값 세트 를 갖습니다.
이러한 각 세트의 데카르트 곱은 기본적으로 자동차가 . 따라서 가능한 값은 다음과 같습니다.
(gear, steer, accel, pssngers)
--------|---------|----------|---------
(1st, left, foot down, none)
(neutral, straight, off, the kids)
데카르트 곱의 크기는 물론 각 세트의 가능성의 곱 (곱셈)입니다. 따라서 자동차에 5 개의 기어 (+ 후진 + 중립)가 있고 스티어링이 왼쪽 / 직선 / 오른쪽, 가속기가 켜짐 / 꺼짐 및 최대 4 명의 승객이있는 경우 7 x 3 x 2 x 4 또는 168 개의 가능한 상태가 있습니다.
이 마지막 사실은 직교 곱 ( 그런데 르네 데카르트의 이름을 따서 명명 됨 )에 곱셈 기호 가있는 이유입니다.x
에서 이 스레드 :
수학에서 두 세트 A, B의 데카르트 곱은로 표시
AxB
되고 그 요소는(a, b)
이며, 여기서 a는 A이고 b는 B입니다.세 세트의 경우 (Cartesian) 제품의 요소는 다음
(a, b, c)
과 같습니다 .따라서 요소의 튜플이 있으며 실제로 모든 튜플 (예
Tuple1
:)이 각 제품 특성 (예 :)을 상속 한다는 것을 Scala 라이브러리에서 볼 수 있습니다Product1
.제품을 추상화로 생각하고 각 튜플을 구체적인 표현이라고 생각하십시오 .
프로젝션을 사용하면 제품에서 참조하는 'n'클래스의 인스턴스를 가져올 수 있습니다.
데카르트 제품은 세트의 제품입니다. 집합 A와 B가 주어지면 A x B ( "A 교차 B")는 x가 A에 있고 y가 B에있는 모든 튜플 (x, y)의 집합입니다. 데카르트 곱은 다음 유형에 유사하게 정의 될 수 있습니다. 유형 A와 B, A x B는 튜플 유형 (x, y)입니다. 여기서 x는 A 유형이고 y는 B 유형입니다.
따라서 Product4는 튜플 유형 (w, x, y, z)이며 여기서 w, x, y, z는 구성 요소입니다.
나는 누군가가 Product
내가했던 것처럼 멤버 반복자처럼 작동하는 것에 대해 혼란스러워 할 것이라고 생각한다 .
사실 2019 년에는 모두가 데카르트 곱이 무엇인지 알고 있다고 생각 합니다. 그러나 튜플에서 데카르트 곱은 어디에 있습니까? {a, b, c}와 {1,2,3}가 있으면 {a, 1}, {a, 2} ... {c, 3}를 얻게됩니다. 그러나 Tuple2 (a, 1)을 발견하면 (a, 1) 만 가지고 있는데 어떻게 하나의 제품을 대상으로 할 수 있습니까?
따라서 구현하는 클래스를 Product
선언으로 취급합시다 . 클래스 A (String, Int, Double) implentment Product3이면 클래스를 (String, Int, Double)의 Cartesian Product 의 결과로 취급 하므로 _1
_2
_3
지금 메서드 를 사용할 수 있습니다 .
참고 URL : https://stackoverflow.com/questions/1301907/how-should-i-think-about-scalas-product-classes
'Programing' 카테고리의 다른 글
gcc가 꼬리 재귀 최적화를 수행하는지 어떻게 확인합니까? (0) | 2020.12.05 |
---|---|
기본 유형에 대한 일반 유형 제한을 정의하는 방법은 무엇입니까? (0) | 2020.12.05 |
XML에 중첩 된 주석? (0) | 2020.12.05 |
Android 에뮬레이터를 빠르게 조정하여 조정할 수 있습니까? (0) | 2020.12.05 |
프록시를 사용하는 openssl s_client (0) | 2020.12.05 |