2015-04-23 19:34:47 +00:00
\ifger { Um es kurz zu machen, die abstrakte Lösung ist:} { To cut the story short, the abstract solution looks like this:}
2015-04-19 22:32:50 +00:00
\begin { haskellcode}
fold :: b -> (a -> b -> b) -> [a] -> b
fold z f [] = z
2015-04-20 13:06:54 +00:00
fold z f (x:xs) = x `f` (fold z f xs)
2015-04-19 22:32:50 +00:00
\end { haskellcode}
Whoa! What's going on here?\\
2015-04-23 19:34:47 +00:00
\ifger { Schauen wir genauer hin...} { Let's see...}
2015-04-19 22:32:50 +00:00
\begin { itemizep}
2015-04-23 19:34:47 +00:00
\item \hinline { z} \ifger { ist was die Funktion zurückgibt, wenn die Liste leer ist} { is what we return if the list is empty}
\item \hinline { f} \ifger { ist unsere Funktion} { is our function} (\ifger { z.b.} { e.g.} \hinline { (*)} \ifger { oder} { or} \hinline { (+)} )
\item \ifger { das letzte Argument ist die eigentliche Liste, auf der wir arbeiten} { and the last remaining argument is the actual list we are working on}
2015-04-19 22:32:50 +00:00
\end { itemizep}
\slidep
2015-04-23 19:34:47 +00:00
\ifger { Die Funktionsanwendung hat die folgende Form:} { The function application has the following form:} \\
2015-04-20 18:55:41 +00:00
\hinline { fold f z [a,b,c] == a `f` (b `f` (c `f` z))}
2015-04-19 22:32:50 +00:00
\vspace { \baselineskip }
\\
2015-04-23 19:34:47 +00:00
\ifger { D.h. hier falten wir von rechts. \emph { Prelude} definiert diese Funktion bereits, die fast genauso ist wie unsere. Sie heisst \textbf { foldr} .} { This folds from the right, so the \emph { Prelude} already defines a function which is very similar to ours and called \textbf { foldr} .}