Gepostet: |
Listen - Anfängerproblem | ||||||||||
Hallo, nachdem ich bisher nur in Java unterwegs war wollte ich mich mal an Haskell heranwagen. Bräuchte für eine ganz einfache Aufgabe eine Lösung. 1. Schreiben Sie eine Funktion sum, die als Eingabe eine Liste xs von ganzen Zahlen erhält und deren Summe als Ergebnis zurückliefert. (z.B. ist sum [4,6,3] = 13) Habe es so versucht: > sum :: [Int] -> Int > sum [] = 0 > sum (a:x) = a + sum x Kommt aber leider eine Fehlermeldung. 2. Schreiben Sie eine Funktion take, die eine ganze Zahl n>=0 und eine Liste xs als Eingabe bekommt und als Ergebnis die Lister der ersten n Elemente von xs liefert. Sollte xs weniger als n Elemente haben, so wird die gesamte Liste xs zurückgeliefert. (z.B. take 3 [2,5,6,4,2] = [2,5,6] und take 5 [True, False] = [True, False], Die Funktion take darf zur Lösung nicht verwendet werden, weil bereits vordefiniert.) Schon mal Danke im voraus. |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hi, zu 1.) Vermutlich liegt das Problem am Namen der Funktion, da es in Haskell bereits eine vordefinierte Funktion sum gibt. Du brauchst die Funktion also nur umbenennen, der Code ist ansonsten nämlich korrekt. zu 2.) Ein paar Hinweise für die Funktion take' (take ist ja auch schon vordefiniert). Die Signatur der Funktion sollte etwa so aussehen: take' :: Int -> [a] -> [a], also eine Funktion die einen Int und eine Liste beliebigen Typs bekommt und daraus wieder eine Liste des gleichen Typs macht. Die Funktion gibt die leere Liste zurück, falls der Int n = 0 ist oder die übergebene Liste schon leer ist. Ansonsten wird das erste Element der Liste an die (n-1) ersten Elemente der Restliste gehängt (durch Rekursion berechnet). Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Danke, wusste nicht das sum ebenso wie take bereits vordefiniert ist. Nun hats bestens geklappt! | |||||||||||
Zum Seitenanfang | |||||||||||