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?
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.
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
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 (commeProduct1
).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.
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.
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
_3
method.