web-dev-qa-db-fra.com

Comment devrais-je penser aux classes de produits Scala?

Le paquet "scala" contient un certain nombre de classes nommées Product, Product1, Product2, etc., jusqu'à Product22.

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

Product4 is a cartesian product of 4 components

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

Aidez-moi à comprendre le point de vue correct du langage fonctionnel. Quel est le sens du "produit cartésien" utilisé ici? Qu'est-ce que les membres "projection" des classes de produits indiquent?

55
mtnygard

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

"Plus précisément, le produit cartésien de deux ensembles X (par exemple les points sur un axe x) et Y (par exemple les points sur un axe 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 tout le plan xy) "

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

Sous-classes directes connues: Tuple4

Ou, en le connaissant " étend Product ", savez ce que les autres classes peuvent utiliser, en vertu de l'extension Product elle-même. Je ne citerai pas cela ici, cependant, parce que c'est plutôt long.

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

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

28
Daniel C. Sobral

Tout le monde est parti pour le calcul donc je vais aller pour la réponse idiote au cas où! Vous avez une voiture simple qui a une boîte de vitesses, un volant, un accélérateur et un certain nombre de passagers. Celles-ci peuvent chacune varier: dans quel rapport êtes-vous, dans quelle direction vous dirigez-vous, votre pied est-il "au sol" etc. La boîte de vitesses, la direction, 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 fondamentalement tous les états possibles dans lesquels votre voiture peut se trouver . Donc, quelques valeurs possibles sont:

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

la taille du produit cartésien est bien entendu le produit (multiplication) des possibilités de chaque ensemble. par conséquent, si votre voiture a 5 vitesses (+ marche arrière + point mort), la direction est gauche/droite/droite, l'accélérateur est activé/désactivé et jusqu'à 4 passagers, il y a alors 7 x 3 x 2 x 4 ou 168 états possibles.

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

52
oxbow_lakes

De ce fil :

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

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

Donc, vous avez des n-uplets d’éléments et vous pouvez effectivement voir dans la bibliothèque Scala que tous les n-uplets (comme Tuple1 ) héritent du trait de produit correspondant (comme Product1 ).

Considère le produit comme l'abstraction et le nuplet respectif une représentation concrète .

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

7
VonC

Un produit cartésien est un produit d'ensembles. Soit les ensembles A et B, A x B ("croix en 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 défini de manière analogue sur les types types A et B, A x B est le type de nuplets (x, y) où x est du type A et y du type B.

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

4
Thom Smith

Je pense que quelqu'un pourrait se sentir dérouté car Product fonctionne comme un itérateur membre, tout comme je l'ai fait.

En fait, je pense qu'en 2019, tout le monde sait ce qu'est un produit cartésien . Mais où est le produit cartésien dans un tuple? Je sais que si nous avons {a, b, c} et {1,2,3} nous aurons {a, 1}, {a, 2} ... {c, 3}. Mais quand nous rencontrons Tuple2 (a, 1), nous avons juste (a, 1), comment peut-on un objet Product?

Traitons donc les classes qui implémentent Product comme des déclarations. Si la classe A (String, Int, Double) implentment Product3, nous la traitons comme le résultat d'un Produit cartésien de (String, Int, Double). Vous savez donc que vous pouvez maintenant utiliser _1_2_3method.

0
Norman Bai