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?
4 réponses
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.
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
À 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 (commeProduct1
).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.
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.