tutorial programming learn koans functional exercises codecademy app scala functional-programming

programming - ¿Cómo debería pensar en las clases de productos de Scala?



scala programming (4)

El paquete "scala" tiene varias clases llamadas Product, Product1, Product2, etc., hasta Product22.

Las descripciones de estas clases son seguramente precisas. Por ejemplo:

Product4 is a cartesian product of 4 components

Preciso, sí. ¿Comunicativo? No tanto. Espero que esta sea la redacción perfecta para alguien que ya entiende el sentido de "producto cartesiano" que se usa aquí. Para alguien que no, suena un poco circular. "Oh, sí, bueno, por supuesto, Product4 es el murmullo de 4 balbuceos ".

Por favor, ayúdame a comprender el punto de vista del lenguaje funcional correcto. ¿Cuál es el sentido de "producto cartesiano" que se usa aquí? ¿Qué indican los miembros de "proyección" de las clases de Producto?


De este hilo :

De las matemáticas, un producto cartesiano de dos conjuntos A, B se denota como AxB y sus elementos son (a, b) , donde a en A y b en B.

Para tres conjuntos, los elementos del producto (cartesiano) son (a, b, c) y así sucesivamente ...

Entonces, tienes tuplas de elementos, y de hecho puedes ver en la biblioteca de Scala que todas las tuplas (como Tuple1 ) heredan el rasgo respectivo del producto (como Product1 ).

Piense en el producto como la abstracción y la respectiva tupla en una representación concreta .

La proyección permite obtener la instancia de la clase ''n'' referenciada por el Producto.


Todos los demás se han ido por las matemáticas, así que iré por la respuesta tonta por las dudas. Usted tiene un automóvil simple que tiene una caja de cambios, un volante, un acelerador y varios pasajeros. Cada uno puede variar: en qué equipo estás, de qué manera estás conduciendo, si tu pie está "en el piso", etc. La caja de cambios, la dirección, el acelerador, etc. son variables y cada uno tiene su propio conjunto de valores posibles.

El producto cartesiano de cada uno de estos conjuntos es básicamente todos los estados posibles en los que puede estar su automóvil . Entonces algunos valores posibles son:

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

el tamaño del producto cartesiano es, por supuesto, el producto (multiplicación) de las posibilidades de cada conjunto. por lo tanto, si su automóvil tiene 5 velocidades (+ marcha atrás + punto muerto), la dirección es izquierda / recta / derecha, el acelerador está encendido / apagado y hasta 4 pasajeros, luego hay 7 x 3 x 2 x 4 o 168 estados posibles.

Este último hecho es la razón por la cual el producto cartesiano (llamado así por René Descartes ) tiene el símbolo de multiplicación x


Un producto cartesiano es un producto de conjuntos. Dados los conjuntos A y B, A x B ("A cruz B") es el conjunto de todas las tuplas (x, y) tales que x está en A y y está en B. Un producto cartesiano puede definirse análogamente en tipos: dado tipos A y B, A x B es el tipo de tuplas (x, y) donde x es de tipo A e y es de tipo B.

Entonces Product4 es el tipo de tuplas (w, x, y, z), donde w, x, y, z son componentes.


"El conjunto de todos los pares posibles de elementos cuyos componentes son miembros de dos conjuntos".

"Específicamente, el producto cartesiano de dos conjuntos X (por ejemplo, los puntos en un eje x) e Y (por ejemplo, los puntos en un eje y), denotado X × Y, es el conjunto de todos los pares ordenados posibles cuya primera componente es un miembro de X y cuyo segundo componente es un miembro de Y (por ejemplo, la totalidad del plano xy) "

Quizás se pueda obtener una mejor comprensión al saber quién se deriva de ella:

Subclases directas conocidas: Tuple4

O bien, sabiendo que " extiende el Producto ", sepa qué otras clases pueden hacer uso de él, en virtud de extender el Product mismo. No citaré eso aquí, porque es bastante largo.

De todos modos, si tiene los tipos A, B, C y D, entonces Product4 [A, B, C, D] es una clase cuyas instancias son todos los elementos posibles del producto cartesiano de A, B, C y D. Literalmente.

Excepto, por supuesto, que Product4 es un Rasgo, no una clase. Solo proporciona algunos métodos útiles para las clases que son productos cartesianos de cuatro conjuntos diferentes.