Gepostet: |
kleinstmögliche differenz ausgeben | ||||||||||
hey leute und zwar geht es darum, bei der Eingabe von drei Integeren die kleinstmögliche Differenz aus zweien dieser drei Integere auszurechnen: differenceAB :: Int -> Int -> Int differenceAB a b | a > b = abs(a-b) differenceBC :: Int -> Int -> Int differenceBC b c | b > c = abs(b-c) differenceAC :: Int -> Int -> Int differenceAC a c | a > c = abs(a-c) smallestDifference3 :: Int -> Int -> Int -> Int smallestDifference3 a b c | (differenceAB < differenceBC) && (differenceBC < differenceAC) = differenceAB | otherwise = differenceAB da kriege ich aber: Couldn't match expected type `Int' with actual type `Int -> Int -> Int' In the expression: differenceAB In an equation for `smallestDifference3': smallestDifference3 a b c | (differenceAB < differenceBC) && (differenceBC < differenceAC) = differenceAB | otherwise = differenceAB Failed, modules loaded: none. weiß jmd wieso? |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Vor die | muss mindestens ein Leerzeichen, aber ich denke, das ist das Forum hier (versuche mal Code-Tags). Der Fehler ist einfach, dass du in smallestDifference deine Unterfunktionen wie Variablen benutzt, aber differenceAB ist ja kein Int, sondern eine Funktion Int -> Int -> Int. Du willst an der Stelle aber das Endergebnis, also musst du auch die Argumente mitgeben: (differenceAB a b) Diese Unterfunktionen sind aber auch nicht richtig: Du behandelst z.B. bei differenceAB den Fall a > b, aber was passiert bei a <= b? Da gibt es dann einen Match-Error Ich denke, folgende Variante ist nicht nur kurz, sondern auch leicht verständlich:
Wenn du minimum nicht verwenden darfst oder noch keine Listen hattest, würde ich das vorschlagen:
Ich hoffe das hilft dir weiter |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
ich versuche gerade sowas ähnliches, allerdings sind meine Int in einer Liste und ich will jeweils die größte differenz von direkten Nachbarn ermitteln
das ist mein ansatz, der zumindest schon mal die differenzen errechnet, klappt allerdings nur bei gerader Elementanzahl.. Hab den Eindruck das ich völlig auf dem falschen weg bin |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Um eine Operation op auf benachbarte Listenelemente anzuwenden, bietet sich das Schema "zipWith op xs (tail xs)" an. Und zur Ermittlung des Maximums gibt es auch eine fertige Funktion:
|
|||||||||||
Zum Seitenanfang | |||||||||||