Links und Funktionen
Sprachumschaltung

Navigationspfad
Sie sind hier: Startseite / Lehre / SS 2015 / Programmierung und Modellierung / ProMo Material / Code Vorlesung 16.07.2015


Inhaltsbereich

Code Vorlesung 16.07.2015

Etliche Variationen der Bibliotheksfunktion all :: (a -> Bool) -> [a] -> Bool. Es gibt sicherlich noch zahlreiche weitere Varianten. ;)

Haskell source code icon faq.hs — Haskell source code, 1 KB (1327 bytes)

Dateiinhalt

----------------------------------------------------------------------------
-- Code aus der Fragestunde der Vorlesung
-- "Programmierung und Modellierung"
-- am 16.07.2015 an der LMU München
-- live verfasst von Steffen Jost
--

-- Mögliche Implementationen
-- der Bibliotheksfunktions "all":

all1 :: (a -> Bool) -> [a] -> Bool
all1 p []    = True
all1 p (h:t) = if p h then all1 p t else False

all2 :: (a -> Bool) -> [a] -> Bool
all2 p []    = True
all2 p (h:t) | p h       = all2 p t
             | otherwise = False

all3 :: (a -> Bool) -> [a] -> Bool
all3 p []    = True
all3 p (h:t) = (p h) && (all3 p t)

all4 :: (a -> Bool) -> [a] -> Bool
all4 p xs = and (map p xs)

all5 :: (a -> Bool) -> [a] -> Bool
all5 p xs = foldl allaux True xs
  where
    allaux acc x = (p x) && acc

all6 :: (a -> Bool) -> [a] -> Bool
all6 p xs = foldl allaux True xs
  where
    allaux False x = False
    allaux True  x = p x

all7 :: (a -> Bool) -> [a] -> Bool
all7 p xs = foldr allaux True xs
  where
    allaux x acc  = acc && (p x)

all8 :: (a -> Bool) -> [a] -> Bool
all8 p xs = foldr allaux True xs
  where
    allaux x acc  = (p x) && acc

-- all5, all6 und all7 terminieren nie auf unendlichen Listen,
-- all8 kann auf unendlichen Listen terminieren,
--   wenn ein Element in einem endlichen Anfangsstück das Prädikat erfüllt

Artikelaktionen


Funktionsleiste