2009-07-30 18 views
6

Ich versuche, eine Funktion zu schreiben, die den absoluten Wert einer ganzen Zahl zurück ...absolute Werte in Haskell

abs :: Int -> Int 

abs n | n >= 0 = n 
     | otherwise = -n 


myabs :: Int -> Int 

myabs n = if n >= 0 then n else -n 

Beide arbeiten für positive ganze Zahlen sind aber nicht negativen ganzen Zahlen. Irgendeine Idee warum?

Antwort

10

scheinen Beide gut zu funktionieren:

 
Main> myabs 1 
1 
Main> myabs (-1) 
1 
Main> abs 1 
1 
Main> abs (-1) 
1 
5

Ahh! Ich wusste nicht, dass Sie Klammern in ...

myabs (-1) 

jemand Pass die Dummköpfe Kappe. dohhh

+4

Dies sollte ein Kommentar sein (Sie können das jetzt tun). :) –

+2

^Selbstreferenziell: D –

4

Richtig, normalerweise müssen Sie negative Werte in Klammern setzen, um die Rangfolge der Operatoren zu unterscheiden. Weitere Informationen finden Sie unter Real World Haskell chapter 1.