Programing

Scala의 Product 클래스에 대해 어떻게 생각해야합니까?

crosscheck 2020. 12. 5. 09:18
반응형

Scala의 Product 클래스에 대해 어떻게 생각해야합니까?


패키지 "scala"에는 Product, Product1, Product2 등의 여러 클래스가 Product22까지 있습니다.

이 클래스에 대한 설명은 확실히 정확합니다. 예를 들면 :

Product4 is a cartesian product of 4 components

네, 정확합니다. 의사 소통? 별로. 나는 이것이 여기에서 사용되는 "직교 적 제품"의 의미를 이미 이해하고있는 사람을위한 완벽한 표현이라고 기대합니다. 그렇지 않은 사람에게는 약간 원형으로 들립니다. "네, 물론 Product4는 4 개의 중얼 중얼 중얼 거리는 제품입니다 ."

올바른 기능적 언어 관점을 이해하도록 도와주세요. 여기서 사용되는 "직교 곱"의 의미는 무엇입니까? 제품 클래스의 "프로젝션"멤버는 무엇을 나타 냅니까?


"구성 요소가 두 세트의 구성원 인 모든 가능한 요소 쌍의 세트."

"구체적으로, X x Y로 표시되는 X (예 : x 축의 점) 및 Y (예 : y 축의 점) 두 세트의 데카르트 곱은 가능한 모든 순서 쌍의 집합입니다. component는 X의 구성원이고 두 번째 구성 요소는 Y의 구성원 (예 : xy 평면 전체) "

누가 그로부터 파생되는지를 아는 것이 더 나은 이해를 얻을 수 있습니다.

직접 알려진 하위 클래스 : 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

반응형