[Haskell] Vereinfachung von alternierender Funktion
-
as :: [Integer] -> Integer as [] = 0 as (x:xs) = x + as2 xs as2 :: [Integer] -> Integer as2 [] = 0 as2 (x:xs) = (-x) + as xs
Ich könnte das jetzt statt mit zwei Funktionen mit einer Funktion und einem Flag True/False machen. Aber gibt es einen anderen Weg das in eine Funktion zu bringen?
MfG SideWinder
-
Du willst ja wie im IRC bestätigt f [a,b,c] = a - b + c, nicht andersrum.
Daher folgende Vorschläge:
as = foldr (-) 0 -- was das gleiche ist wie as [] = 0 as x:xs = x - as xs -- oder, wieder anders as [] = 0 as [x] = x as (x:y:xs) = x - y + as xs
Die ersten zwei Methoden nutzen aus, dass a - b + c - d + ... = a - (b - (c - (d - ...)))
-
as :: [Integer] -> Integer as [] = 0 as [x] = x as (x:y:xs) = x - y + as xs
Edit: Da war wieder einer schneller. Und auch noch viel eleganter
-
Danke guter Herr.
MfG SideWinder