Sie können von Rekursion machen wie die anderen Antworten zeigen. Sie können jedoch auch Butintins verwenden, um eine solche Funktion zu erstellen.
Zwei relevante Funktionen sind hier null :: [a] -> Bool
, die prüft, ob eine Liste leer ist, und last :: [a] -> a
, die das letzte Element erhält.
So, jetzt können wir eine Funktion konstruieren:
import Data.Char(isUpper)
checkLast :: [Char] -> Bool
checkLast l = not (null l) && isUpper (last l)
So, hier wir feststellen, dass checkLast
ist True
, wenn die Liste l
nicht leer ist (not (null l)
); und das letzte Element ist ein Großbuchstabe isUpper (last l)
.
Dies wird wahrscheinlich ein bisschen schneller sein als die rekursiven Funktionen, da wir den []
Fall nur einmal testen (in null
). last
prüft nur zwei Fälle: [x]
und (x:xs)
so sparen wir []
prüft.
Natürlich ist diese Funktionen mit Rekursion arbeiten, aber es ist manchmal nützlich für Hilfsfunktionen zu suchen, so dass eine Funktion fast selbsterklärend: hier die Funktionen sagen: "Eine Liste l
ist checkLast
wenn es nicht leer ist, und das letzte Element ist ein Großbuchstabe ".
Ein paar Dinge.** 1 ** 'wenn isUpper x dann True else False ist das gleiche wie' isUpper x'. ** 2 ** Werfen Sie einen zweiten Blick auf den letzten Fall. Woher bekommst du 'last'? Warum ist 'x: xs' unbenutzt? – SwiftsNamesake