Как я могу думать о Scala классах продуктов?
В пакете "scala" есть несколько классов с именем Product, Product1, Product2 и т.д., вплоть до Product22.
Описания этих классов, безусловно, точны. Например:
Product4 is a cartesian product of 4 components
Точный, да. Коммуникативная? Не так много. Я ожидаю, что это идеальная формулировка для тех, кто уже понимает смысл "декартового продукта", используемого здесь. Для кого-то, кто этого не делает, это звучит немного круговым. "О да, ну, конечно, Product4 - это бормотание из 4-х бормоток".
Пожалуйста, помогите мне понять правильную точку зрения на функциональном языке. В чем смысл использования "декартова продукта"? Что означают члены проекции "классы проекции"?
Ответы
Ответ 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 - компоненты.