2009-07-30 15 views
6

Estoy tratando de escribir una función que devuelve el valor absoluto de un número entero ...valores absolutos en Haskell

abs :: Int -> Int 

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


myabs :: Int -> Int 

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

Ambos trabajan para los enteros positivos, pero los números enteros no negativos. ¿Alguna idea de por qué?

Respuesta

10

Ambos parecen funcionar muy bien:

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

Ahh! No sabía que tenía que incluir los paréntesis en ...

myabs (-1) 

alguien pase la tapa de dunces. dohhh

+4

Esto debería ser un comentario (puede hacerlo ahora). :) –

+2

^Autorreferente: D –

4

Correcto, generalmente es necesario poner en paréntesis los valores negativos para eliminar la ambigüedad de la precedencia del operador. Para más detalles, vea Real World Haskell chapter 1.

Cuestiones relacionadas