www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

tenshi

Gepostet:
25.01.2007 14:05

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    
 
Siracusa

Gepostet:
25.01.2007 18:45

   
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    
 
tenshi

Gepostet:
26.01.2007 21:21

   
Danke, wusste nicht das sum ebenso wie take bereits vordefiniert ist. Nun hats bestens geklappt!
Zum Seitenanfang