Подтвердить что ты не робот

Как я могу думать о Scala классах продуктов?

В пакете "scala" есть несколько классов с именем Product, Product1, Product2 и т.д., вплоть до Product22.

Описания этих классов, безусловно, точны. Например:

Product4 is a cartesian product of 4 components

Точный, да. Коммуникативная? Не так много. Я ожидаю, что это идеальная формулировка для тех, кто уже понимает смысл "декартового продукта", используемого здесь. Для кого-то, кто этого не делает, это звучит немного круговым. "О да, ну, конечно, Product4 - это бормотание из 4-х бормоток".

Пожалуйста, помогите мне понять правильную точку зрения на функциональном языке. В чем смысл использования "декартова продукта"? Что означают члены проекции "классы проекции"?

4b9b3361

Ответ 1

Множество всех возможных пар элементов, компоненты которых являются членами двух наборов.

"В частности, декартово произведение двух множеств X (например, точек на оси x) и Y (например, точек на y- ось), обозначаемая X × Y, является множеством всех возможных упорядоченных пар, первый компонент которых является членом X, а второй компонент является членом Y (например, всей плоскости xy)"

Возможно, лучшее понимание может быть достигнуто, зная, кто вытекает из него:

Прямые известные подклассы: Tuple4

Или, зная, что это "расширяет продукт", знайте, что другие классы могут использовать его, в силу расширения Product. Я не буду приводить это здесь, потому что он довольно длинный.

В любом случае, если у вас есть типы A, B, C и D, то Product4 [A, B, C, D] является классом, экземплярами которого являются все возможные элементы декартова произведения A, B, C и D. В буквальном смысле.

Кроме того, конечно, что Product4 является признаком, а не классом. Он просто предоставляет несколько полезных методов для классов, которые являются декартовыми произведениями из четырех разных наборов.

Ответ 2

Все остальные пошли на математику, поэтому я пойду за глупый ответ на всякий случай! У вас есть простой автомобиль с коробкой передач, рулевым колесом, ускорителем и несколькими пассажирами. Каждый из них может варьироваться: какой механизм вы используете, каким образом вы управляете, ваша нога "на полу" и т.д. Поэтому коробка передач, рулевое управление, ускоритель и т.д. Являются переменными, и каждый из них имеет свой собственный набор возможных значений.

Декартово произведение каждого из этих множеств - это в основном все возможные состояния, в которых может находиться ваш автомобиль. Таким образом, несколько возможных значений:

(gear,    steer,    accel,     pssngers)
--------|---------|----------|---------
(1st,     left,     foot down, none)
(neutral, straight, off,       the kids)

размер декартова произведения - это, конечно, произведение (умножение) возможностей каждого множества. поэтому, если у вас есть 5 передач (+ обратная + нейтральная), рулевое управление слева/справа/справа, ускоритель включен/выключен и до 4 пассажиров, то есть 7 x 3 x 2 x 4 или 168 возможных состояний.

Этот последний факт является причиной того, что декартово произведение (названное в честь Rene Descartes) имеет символ умножения x

Ответ 3

От этот поток:

Из математики декартово произведение двух множеств A, B обозначается как AxB, а его элементы (a, b), где a в и b из B.

Для трех наборов элементы (декартова) произведения (a, b, c) и т.д....

Итак, у вас есть кортежи элементов, и действительно, вы можете видеть в библиотеке Scala, что все кортежи (например, Tuple1) наследуют соответствующий признак продукта (например, Product1).

Подумайте о продукте как о абстракции, а соответствующий набор - конкретное представление.

Проецирование позволяет получить экземпляр класса 'n', на который ссылается Продукт.

Ответ 4

Декартово произведение является произведением множеств. Для заданных множеств A и B A x B ( "A cross B" ) является множеством всех наборов (x, y) таких, что x находится в A, а y - в B. Декартово произведение может быть аналогично определено на типах: задано типы A и B, A x B - тип кортежей (x, y), где x имеет тип A, а y имеет тип B.

So Product4 - тип кортежей (w, x, y, z), где w, x, y, z - компоненты.