2016-05-27 18 views

Antwort

7

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 
+0

Danke für die Antwort, können Sie erklären, was die Foldr-Funktion tut bitte? –

+0

Ich habe die Antwort bearbeitet, um die foldr-Funktion zu erklären. Hoffe, dass es dir hilft. –

1

können Sie dies mit einer Falte Funktion:

foldr (*) 1 [2,3,4] 

oder ...

foldr1 (*) [2,3,4] 
1

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).

Verwandte Themen