Antwort mit KI erzeugt
Erklärung
Um eine Funktion zu erstellen, die eine anonyme Funktion (Lambda-Ausdruck) und eine Liste als Eingabe akzeptiert und den höchsten Wert zurückgibt, gibt es ein paar wichtige Punkte zu beachten:
1. Die Funktion
max
kann nur auf Werte angewendet werden, die miteinander verglichen werden können (Ord-Typklasse).
2. Du möchtest nicht nur einfache Werte, sondern Funktionsergebnisse vergleichen.
In Haskell können wir so etwas mit Hilfe der Funktion
maximumBy
aus dem Modul
Data.List
erreichen. Hier müssen wir eine Vergleichsfunktion zur Verfügung stellen.
Schritte
1. Importiere das Modul
Data.List
, um Zugriff auf
maximumBy
zu haben.
2. Definiere eine Vergleichsfunktion, die auf den Ergebnissen deiner anonymer Funktion basiert.
Code
Hier ist der vollständige Code, der deine Problemstellung löst:
haskell
import Data.List (maximumBy)
import Data.Ord (comparing)
getMax :: (a -> b) -> [a] -> a
getMax f xs = maximumBy (comparing f) xs
-- Beispielverwendung
main :: IO ()
main = do
print $ getMax (\x -> mod x 5) [1,4,7] -- Output sollte 4 sein
Erklärung des Codes:
-
import Data.List (maximumBy)
importiert die Funktion
maximumBy
, die das Maximum einer Liste basierend auf einer Vergleichsfunktion findet.
-
import Data.Ord (comparing)
importiert die Funktion
comparing
, die eine Vergleichsfunktion für
maximumBy
erstellt.
-
getMax :: (a -> b) -> [a] -> a
ist die Typsignatur der Funktion. Diese Funktion nimmt eine Funktion von Typ
a -> b
und eine Liste von Typ
[a]
und gibt ein Element vom Typ
a
zurück.
-
getMax f xs = maximumBy (comparing f) xs
definiert
getMax
, wobei
maximumBy (comparing f) xs
das Maximum der Liste
xs
basierend auf den Ergebnissen der Funktion
f
findet.
Die Funktion
getMax
wird also jedes Element der Liste durch die Funktion
f
laufen lassen und dann das Element zurückgeben, das den maximalen Funktionswert hat.
Beispiel
Wenn du
getMax (\x -> mod x 5) [1,4,7]
aufrufst:
-
mod 1 5
ergibt
1
-
mod 4 5
ergibt
4
-
mod 7 5
ergibt
2
Der höchste Funktionswert, basierend auf
mod x 5
, ist
4
, daher gibt
getMax (\x -> mod x 5) [1,4,7]
den Wert
4
zurück.