Comment devrais-je penser aux classes de produits de Scala?

Le paquet "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 is a cartesian product of 4 components

Précis, Oui. Communicative? Pas tellement. Je m'attends à ce que ce soit le libellé parfait pour quelqu'un qui comprend déjà le sens du "produit cartésien" utilisé ici. Pour quelqu'un qui ne le fait pas, cela semble un peu circulaire. "Oh oui, bien sûr Product4 est le produit mumble de 4 mumble-marmonne."

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

54
demandé sur mtnygard 2009-08-19 22:48:25

4 réponses

"L'ensemble de toutes les paires possibles d'éléments 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és X × Y, est l'ensemble de toutes les paires ordonnées possibles dont la première composante est un membre de X et dont la seconde composante est un membre de Y (par exemple l'ensemble)"

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

Sous-Classes Connues Directement: Tuple4

Ou en le sachant " étend le produit ", sachez quelles autres classes peuvent en faire usage, 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, 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 juste quelques méthodes utiles pour les classes qui sont des produits cartésiens de quatre ensembles différents.

28
répondu Daniel C. Sobral 2009-08-19 19:03:14

Tout le monde est allé pour les mathématiques, donc je vais aller pour la réponse stupide juste 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. Ceux - ci peuvent chacun varier: dans quel équipement êtes-vous, de quelle manière dirigez-vous, Votre pied est-il "sur le sol" 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 fondamentalement tous les états possibles que votre voiture peut être en. Ainsi, 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 sûr le produit (multiplication) des possibilités de chaque ensemble. par conséquent, si votre voiture a 5 vitesses (+ marche arrière + neutre), la direction est Gauche/Droite/Droite, l'accélérateur est activé/désactivé et jusqu'à 4 passagers, alors il y a 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 en passant) a le symbole de multiplication x

45
répondu oxbow_lakes 2009-08-19 22:13:43

À partir de ce fil :

De mathématiques, un Produit Cartésien de deux ensembles A, B est notée AxB et ses éléments sont (a, b), où 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 tuples d'éléments, et en effet vous pouvez voir dans la bibliothèque Scala que tous les tuples (comme Tuple1) hériter du trait de produit respectif (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.

7
répondu VonC 2009-08-19 19:02:18

Un produit cartésien est Un produit d'ensembles. Étant donné les ensembles A et B, A X B ("une 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 défini de manière analogue sur les types: étant donné les types A et B, A X B est le type de tuples (x, y) où]}

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

4
répondu Thom Smith 2009-08-19 19:04:26