Gepostet: |
aus einer Liste l alle Zahlen, die nach einer geraden Zahl stehen löschen | ||||||||||
Hallo, ich habe folgendes Problem: aus einer Liste l alle Zahlen, die nach einer geraden Zahl stehen löschen Mein Ansatz: kill :: [Int] -> [Int] kill [] = [] kill (y:x:xs) = if y`mod`2 == 0 then x: kill xs else kill xs kill list = list Aber leider funzt es net...jemand nen Plan? |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hallo, kannst du das Probelm näher beschreiben? Sollen (a) nur die Zahlen direkt nach einer geraden Zahl gelöscht werden oder (b) wirklich alle noch folgenden Zahlen nach einer geraden Zahl gelöscht werden? Aus [1,3,4,5,7,8,9] würde bei (a) [1,3,4,7,8], bei (b) [1,3,4]. Dein Ansatz verfolgt wohl (a). Wenn y `mod` 2 == 0, dann ist die Zahl ja gerade, d.h. du müßtest danach nicht x : kill xs, sondern nur kill xs zurückgeben, weil das x ja dann weggeworfen werden soll. Also die 0 durch eine 1 ersetzen, dann stimmt es soweit. Das y muß aber in beiden Fällen davor bleiben! Das wirfst du momentan auch einfach weg. Übrigens gibt es die Standard-Funktionen even bzw. odd, die prüfen, ob eine Zahl gerade bzw. ungerade ist. Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||