Ich bin wirklich neu in Haskell und möchte alle Zahlen in einem Array zu multiplizieren. Zum Beispiel .:Multiplizieren Sie alle Zahlen in einer Liste - Haskell
Array:
[3,2,4] //3*2*4
Ausgabe
24
Danke, ist jede Hilfe sehr dankbar.
Ich bin wirklich neu in Haskell und möchte alle Zahlen in einem Array zu multiplizieren. Zum Beispiel .:Multiplizieren Sie alle Zahlen in einer Liste - Haskell
Array:
[3,2,4] //3*2*4
Ausgabe
24
Danke, ist jede Hilfe sehr dankbar.
eine Reihe von Möglichkeiten, es in Haskell gibt es zu tun. Zum Beispiel könnten Sie verwenden:
product [3,2,4]
oder äquivalent
foldr (*) 1 [3,2,4]
oder rekursiv:
prod [] = 1
prod (x : xs) = x * prod xs
Funktion foldr
ist die so genannte Liste catamorphism. Um foldr zu verstehen, müssen wir zuerst Listenkonstruktoren verstehen. In Haskell, [3,2,4]
ist eine Syntax Zucker für 3 : 2 : 4 : []
, wobei :
List-Cons-Konstruktor und []
die leere Liste ist. Die Anwendung foldr f v
ersetzt jedes Auftreten von :
in einer Liste durch die Funktion f
und die leere Liste für v
. Seine Definition lautet wie folgt:
foldr :: (a -> b -> b) -> b -> [a] -> b
foldr f v [] = v -- equation 1
foldr f v (x:xs) = f x (foldr f v xs) -- equation 2
Als Beispiel betrachten foldr (*) 1 [3,2,4]
:
foldr (*) 1 [3,2,4] =
3 * (foldr (*) 1 [2,4]) = (by equation 2 of foldr)
3 * (2 * (foldr (*) 1 [4])) = (by equation 2 of foldr)
3 * (2 * (4 * (foldr (*) 1 []))) = (by equation 2 of foldr)
3 * (2 * (4 * 1)) = (by equation 1 of foldr)
= 24
können Sie dies mit einer Falte Funktion:
foldr (*) 1 [2,3,4]
oder ...
foldr1 (*) [2,3,4]
Die product
Funktion ist genau das, was Sie suchen.
Es hat auch die Funktion product []
gleich 1, wie Sie mathematisch erwarten würde.
Wenn Sie sich die Definition ansehen, können Sie sehen, dass product
tatsächlich die Falte der Multiplikation ist (mit 1 als neutrales Element).
Danke für die Antwort, können Sie erklären, was die Foldr-Funktion tut bitte? –
Ich habe die Antwort bearbeitet, um die foldr-Funktion zu erklären. Hoffe, dass es dir hilft. –