Warum gibt die Funktion product
in Haskell 1
zurück, wenn eine leere Liste angegeben wird?Warum gibt das Produkt [] 1 zurück?
Antwort
Listen bilden Struktur, mit assoziativer ++
eine Monoid binärer Operation und neutrales Element []
. Das heißt, wir haben
[] ++ xs = xs = xs ++ [] (xs ++ ys) ++ zs = xs ++ (ys ++ zs)
Inzwischen Zahlen viele Monoid Struktur haben, aber die entsprechenden hier ist, dass, wenn der Betrieb *
und das neutrale Element ist 1
.
1 * x = x = x * 1 (x * y) * z = x * (y * z)
Die product
Funktion ist nicht nur eine Karte aus Listen von Zahlen Zahlen: es ist ein Monoid-Homomorphismus, die Liste Monoid Struktur in dem numerischen Monoid widerspiegelt. Entscheidend ist,
product (xs ++ ys) = product xs * product ys
und
product [] = 1
In der Tat, die ersteren zu bekommen, wir haben so ziemlich die letztere uns aufgezwungen.
Produkt ist ein Falz mit Anfangswert von 1, wenn so eine leere Liste Klapp den Init-Wert nur zurückkehrt, wich 1.
Ein Beispiel für eine Produktimplementierung es mitströmen ist:
product :: [Int] -> Int
product lst = foldr (\x y -> x*y) 1 lst
Werfen Sie einen Blick auf fold, um richtig zu verstehen.
Es ist eine mathematische Sache - Sie in der Regel eine leere Summe definieren 0
und ein leeres Produkt 1
zu sein, weil dies Ihre übliche Gesetze so schön passt
Sie zum Beispiel die induktive Definition eines Produktes rechtfertigen - see Wikipedia
Weil das die Identität in der Kategorie der Multiplikation ist.
Um praktischer zu sein:
product [1,2,3] == product [1] * product 2:3:[]
== product [1] * product [2] * product 3:[]
== product [1] * product [2] * product [3] * product []
Was wiederum ermöglicht es Ihnen, es mit einer einfachen Rekursion zu implementieren:
product [] = 1
product (x:xs) = x * product xs
- 1. Warum gibt SCOPE_IDENTITY() -1 zurück?
- 2. Warum gibt getPointerCount() immer 1 zurück?
- 3. Warum gibt InsertWithOnConflict (..., CONFLICT_IGNORE) -1 (Fehler) zurück?
- 4. Warum console.log (true + 1) gibt 2 zurück?
- 5. Warum gibt Java BigDecimal 1E + 1 zurück?
- 6. Funktion parseInt (1/10000000) gibt zurück 1. Warum?
- 7. Getch gibt -1 zurück?
- 8. db2_num_rows() gibt -1 zurück
- 9. listView.SelectedItemPosition gibt -1 zurück
- 10. Indexof() gibt -1 zurück
- 11. SKProductsResponse gibt nur ungültige Produkt-IDs zurück
- 12. Warum gibt [NSObject antwortetToSelector: @selector (init)] 1 zurück?
- 13. Warum gibt Memcmp() 256 für eine Differenz von 1 zurück?
- 14. Warum gibt mt_rand (1, PHP_INT_MAX) immer eine ungerade Zahl zurück?
- 15. Warum gibt "n & 1 == 0" immer false zurück?
- 16. availableProcessors() gibt 1 für Dualcore-Telefone zurück
- 17. GetWindowRect gibt 1/4 Fensterbereich zurück
- 18. Warum gibt os.path.isfile False zurück?
- 19. Warum gibt is_array() false zurück?
- 20. Warum gibt sys.getrefcount() 2 zurück?
- 21. Warum gibt RedirectToAction null zurück?
- 22. TryParse() - Warum gibt dieser Code 0 zurück, sollte das Ergebnis nicht -1 sein?
- 23. Warum gibt das Datum "31-12-1899" zurück, wenn 1 an es übergeben wird?
- 24. Warum gibt meine Python-Funktion das Ergebnis nicht zurück?
- 25. Warum "/". Datum ("Y") + 1 in PHP zurück 1?
- 26. Warum gibt SelectSingleNode null zurück?
- 27. Was ist prevObject und warum gibt mein Selektor das zurück?
- 28. HttpURLConnection.getResponseCode() gibt -1 beim zweiten Aufruf zurück
- 29. countTokens() gibt immer 1 mit Benutzereingabe zurück
- 30. Hauptfunktion gibt nichts zurück. Warum?
@developerbmw Sie werden feststellen, dass das Tragen Ihrer Mathe Hut in Haskell ist oft von Vorteil. –