| Hey leutz, ich weiß jetzt nicht,ob das hier in den Teil passt, aber ich wüsste nicht wohin sonst.
Also ich soll ein Haskell-Programm schreiben, welches eine Liste an Tupeln erhält. Diese stellt eine Bitmap dar, wo an jeder Stelle aus der Liste ein * gesetzt ist. An allen anderen Stellen sind Leerzeichen. Die eigentliche Funktion sieht so aus, dass an den Stellen, wo ein * ist jetzt ein Leerzeichen sein... HIer hab ich mal meinen Quelltext bis jetzt.
type Bitmap = [(Int,Int)]
showBMP :: Bitmap -> Int -> Int -> IO()
showBMP l b h = putStr(bmph l b (h-1) 0) where
bmph l b h s
| s == b && h <= 0 = ""
| s == b = '\n': (bmph l b (h-1) 0)
| elem (s,h) l = '*': (bmph l b h (s+1))
| otherwise = ' ': (bmph l b h (s+1))
-- Maximale Breite und Höhe bestimmen
maxBH l = mBH l 0 0 where
mBH [] b h = (b,h)
mBH ((x,y):r) b h = mBH r (max (x+1) b) (max (y+1) h)
printBMP l = showBMP l b h where (b,h) = maxBH l
invert :: Bitmap -> Bitmap
invert [] = []
invert pic = inverth pic newPic where
newPic = let (b,h) = maxBH pic in [(x,y) | x<-[0..b], y<-[0..h-1]]
inverth :: Bitmap -> Bitmap -> Bitmap
inverth [] [] = []
inverth [] ((x,y):s) = []
inverth ((u,v):r) ((x,y):s) | (x,y) == (u,v) = inverth r s
| otherwise = [(x,y)]++inverth ((u,v):r) s
So Fehler ist jetzt, ich geb eine Bitmap ein, z.B [(0,0),(1,1),(2,2)]
erhalte dafür auch das richtige. Wenn ich nun aber auf die wieder die Funktion anwende, erhalte ich nur [(0,0),(1,1)]....
Kann mir jemand sagen, wo mein Fehler liegt??? |