74 votes

Comment dois-je penser aux classes Produit de Scala ?

Le package "scala" a un certain nombre de classes nommées Product, Product1, Product2, et ainsi de suite, jusqu'à Product22.

Les descriptions de ces classes sont sûrement précises. Par exemple:

Product4 est un produit cartésien de 4 composants

Précis, oui. Communicatif? Pas tant que ça. Je m'attends à ce que cela soit la formulation parfaite pour quelqu'un qui comprend déjà le sens du "produit cartésien" utilisé ici. Pour quelqu'un qui ne le comprend pas, cela semble un peu circulaire. "Oh oui, bien sûr, Product4 est le produit de mumble de 4 mumble-mumbles."

Veuillez m'aider à comprendre le point de vue correct du langage fonctionnel. Quel est le sens du "produit cartésien" utilisé ici? Que signifient les membres de "projection" des classes Product?

62voto

oxbow_lakes Points 70013

Tout le monde a opté pour les maths donc je vais répondre de manière un peu idiote au cas où! Vous avez une voiture simple qui possède une boîte de vitesses, un volant, un accélérateur et un certain nombre de passagers. Ceux-ci peuvent varier : dans quelle vitesse êtes-vous, dans quelle direction tournez-vous, votre pied est-il "au plancher" etc. La boîte de vitesses, la direction, l'accélérateur, etc. sont donc des variables et chacune a son propre ensemble de valeurs possibles.

Le produit cartésien de chacun de ces ensembles est essentiellement tous les états possibles dans lesquels votre voiture peut être. Ainsi, quelques valeurs possibles sont :

(vitesse,   direction,  accélération,   passagers)
--------|---------|----------|---------
(1ère,   gauche,     pied au plancher,   aucun)
(neutre, droit,  éteint,         les enfants)

la taille du produit cartésien est bien sûr le produit (multiplication) des possibilités de chaque ensemble. donc si votre voiture a 5 vitesses (+ marche arrière + neutre), que la direction est gauche/droite/devant, que l'accélérateur est sur/off et jusqu'à 4 passagers, alors il y a 7 x 3 x 2 x 4 soit 168 états possibles.

Ce dernier fait est la raison pour laquelle le produit cartésien (nommé après René Descartes au passage) possède le symbole de multiplication x

8 votes

Personnellement, je trouve l'explication des maths beaucoup plus simple!

31voto

Daniel C. Sobral Points 159554

"L'ensemble de tous les paires possibles d'éléments dont les composants sont des membres de deux ensembles."

"Spécifiquement, le produit cartésien de deux ensembles X (par exemple les points sur un axe des x) et Y (par exemple les points sur un axe des y), noté X × Y, est l'ensemble de toutes les paires ordonnées possibles dont le premier composant est un membre de X et dont le second composant est un membre de Y (par exemple le plan x-y entier)"

Peut-être qu'une meilleure compréhension peut être obtenue en sachant qui en dérive :

Sous-classes Directement Connues: Tuple4

Ou en le sachant "étend Product", savoir quelles autres classes peuvent l'utiliser, en vertu de l'extension de Product lui-même. Je ne citerai pas ça ici, cependant, car c'est plutôt long.

Quoi qu'il en soit, si vous avez des types A, B, C et D, alors Product4[A,B,C,D] est une classe dont les instances sont tous les éléments possibles du produit cartésien de A, B, C et D. Littéralement.

Sauf, bien sûr, que Product4 est un Trait, pas une classe. Il fournit simplement quelques méthodes utiles pour les classes qui sont des produits cartésiens de quatre ensembles différents.

0 votes

Veuillez parler de "Ou en, sachant qu'il" étend le produit ", découvrez quelles autres classes peuvent en bénéficier, en vertu de l'extension du produit lui-même." même si c'est long. Les gens l'apprécieront.

2 votes

@user319058 Va ici, clique sur "sous-classes connues", amuse-toi.

0 votes

Ne laisse pas cette réponse mettre de côté deux choses critiques; l'ordre et autorise deux instances du même type? La multiplication est associative, donc l'ordre des éléments multiples n'est pas important. Pourtant, l'ordre des éléments dans Produit fait en sorte qu'il ne soit pas associatif. Et un ensemble réduit techniquement les éléments qui sont équivalents. Ainsi, avoir Int deux fois rompt avec la notion d'ensemble. Y a-t-il des termes plus précis que "produit" et "ensemble" pour cette abstraction?

8voto

VonC Points 414372

De ce fil de discussion:

En mathématiques, un produit cartésien de deux ensembles A, B est noté AxB et ses éléments sont (a, b), où a est dans A et b est dans B.

Pour trois ensembles, les éléments du produit (cartésien) sont (a, b, c) et ainsi de suite...

Vous avez donc des tuples d'éléments, et en effet vous pouvez voir dans la bibliothèque Scala que tous les tuples (comme Tuple1) héritent du respectif trait de produit (comme Product1).

Pensez au produit comme à l'abstraction et au tuple respectif comme à une représentation concrète.

La projection permet d'obtenir l'instance de la classe 'n' référencée par le Produit.

4voto

Thom Smith Points 8204

Un produit cartésien est un produit d'ensembles. Étant donné les ensembles A et B, A x B («A croix B») est l'ensemble de tous les tuples (x, y) tels que x est dans A et y est dans B. Un produit cartésien peut être analogiquement défini sur les types: étant donné les types A et B, A x B est le type de tuples (x, y) où x est de type A et y est de type B.

Donc Product4 est le type de tuples (w, x, y, z), où w, x, y, z sont des composants.

2voto

Norman Bai Points 76

Je pense que quelqu'un pourrait se sentir confus pour Produit fonctionne juste comme un itérateur de membre, tout comme moi.

En fait, je pense qu'en 2019 tout le monde sait ce qu'est un Produit Cartésien. Mais où se trouve le Produit Cartésien dans un Tuple ? Je sais que si nous avons {a, b, c} et {1, 2, 3} nous obtiendrons {a,1}, {a,2}... {c,3}. Mais quand nous rencontrons Tuple2(a,1) nous avons juste (a,1), comment peut-on produire ?

Alors traitons les classes qui implémentent Produit comme des déclarations. Si la classe A(String, Int, Double) implémente Product3, nous traitons la classe comme le résultat d'un Produit Cartésien de (String, Int, Double), donc vous savez maintenant que vous pouvez utiliser la méthode _1 _2 _3 maintenant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X