2009-08-19 17 views
52

Pakiet "scala" ma wiele klas o nazwie Produkt, Produkt1, Produkt2 i tak dalej, aż do Produktu22.Co powinnam myśleć o klasach produktów Scala?

Opisy tych zajęć są z pewnością dokładne. Na przykład:

Product4 is a cartesian product of 4 components 

Dokładne, tak. Rozmowny? Nie tak bardzo. Spodziewam się, że jest to idealne sformułowanie dla kogoś, kto już rozumie znaczenie "produktu kartezjańskiego", który jest tutaj używany. Dla kogoś, kto tego nie robi, brzmi to nieco okrągłe. "No tak, oczywiście produkt 4 to bełkotliwy produkt 4 bełkotliwy-mamusie."

Proszę pomóc mi zrozumieć poprawny punkt widzenia funkcjonalnego języka. Jaki sens ma tu "produkt kartezjański"? Co oznaczają elementy "projekcji" klas produktów?

Odpowiedz

26

"The set of all possible pairs of elements whose components are members of two sets."

"Specifically, the Cartesian product of two sets X (for example the points on an x-axis) and Y (for example the points on a y-axis), denoted X × Y, is the set of all possible ordered pairs whose first component is a member of X and whose second component is a member of Y (e.g. the whole of the x-y plane)"

Być może lepsze zrozumienie można uzyskać przez wiedząc, kto wywodzi się z nim:

bezpośrednie Znane podklasy: Tuple4

albo przez, nie wiedząc o tym "rozszerza Product ", wiem, co mogą nam zrobić inne klasy e z tego, na mocy rozszerzenia samej siebie Product. Nie będę tego tutaj cytował, ponieważ jest dość długi.

W każdym razie, jeśli masz typy A, B, C i D, to Product4 [A, B, C, D] jest klasą, której instancjami są wszystkie możliwe elementy kartezjańskiego produktu A, B, C i D Dosłownie.

Z wyjątkiem oczywiście, że Product4 to cecha, a nie klasa. Dostarcza tylko kilku użytecznych metod dla klas, które są kartezjańskimi produktami czterech różnych zestawów.

+0

proszę mów o „Lub, wiedząc, że«rozciąga produkt», wiedzą, co inne klasy mogą z niego korzystać, dzięki rozszerzeniu samego Produktu. "nawet jeśli jest długi. Ludzie to docenią. –

+2

@ user319058 Przejdź [tutaj] (http://www.scala-lang.org/archives/downloads/distrib/files/nightly/docs/library/index.html#scala.Product), kliknij "znane podklasy", zabawa. –

7

Z this thread:

Z matematyce iloczyn kartezjański dwóch zestawów A, B jest określane jako AxB i jego elementów (a, b), w którym A, B B.

Przez trzy zestawy, elementy (kartezjańskim) produktu są (a, b, c) i tak dalej ...

tak, masz krotki elementów i rzeczywiście widać w bibliotece Scala że wszystkie krotki (jak Tuple1) dziedziczą odpowiednia cecha produktu (taka jak Product1).

Pomyśl o produkcie jako abstrakcji i odpowiedniej krotce z konkretną reprezentacją.

Rzut pozwala uzyskać instancję klasy 'n', do której odnosi się produkt.

4

Produkt kartezjański to produkt zestawów. Biorąc pod uwagę zbiory A i B, A x B ("A B") jest zbiorem wszystkich krotek (x, y) takich, że x jest w A, a y jest w B.Produkt kartezjański może być analogicznie zdefiniowany dla typów: dany typ A i B, A x B to typ krotek (x, y), gdzie x jest typu A, a y jest typu B.

Zatem produkt4 jest typ krotek (w, x, y, z), gdzie w, x, y, z są składnikami.

36

Wszyscy inni poszli na matematykę, więc pójdę po głupią odpowiedź na wszelki wypadek! Masz prosty samochód, który ma skrzynię biegów, kierownicę, pedał gazu i pewną liczbę pasażerów. Każdy z nich może się różnić: , na którym masz włączony bieg, w jaki sposób sterujesz, to twoja stopa "na podłodze" itd. Przekładnia, układ kierowniczy, pedał przyspieszenia itp. Są zatem zmiennymi i każdy ma swój własny zestaw z możliwa wartość.

Produkt kartezjański każdego z tych zestawów to w zasadzie wszystkie możliwe stany, że Twój samochód może być w. Więc kilka możliwych wartości:

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

wielkość iloczyn kartezjański jest oczywiście produkt (mnożenie) z możliwościami każdego zestawu. w związku z tym, jeśli samochód ma 5 biegów (+ bieg wsteczny + neutralny), układ kierowniczy jest lewy/prosty/prawy, pedał przyspieszenia jest włączony/wyłączony i może pomieścić do 4 pasażerów, a następnie ma 7 stanów x 3 x 2 x 4 lub 168 możliwych.

Ten ostatni fakt jest powodem, że iloczyn kartezjański (nazwany Rene Descartes przy okazji) ma symbol mnożenia x

+6

Osobiście uważam wyjaśnienie matematyki za dużo prostsze! –

Powiązane problemy