2010-12-05 32 views
63

Necesito una función que recibe dos Int s (a y b) y devuelve A/B como Int. Estoy seguro de que A/B siempre será un número entero.Int Int Int y volver

Aquí está mi solución:

myDiv :: Int -> Int -> Int 
myDiv a b = 
     let x = fromIntegral a 
      y = fromIntegral b 
     in truncate (x/y) 

Pero queremos encontrar una solución más simple. Algo como esto:

myDiv :: Int -> Int -> Int 
myDiv a b = a/b 

¿Cómo puedo dividir Int a Int y obtener Int?

Respuesta

112

¿Por qué no usar quot?

quot a b 

es el cociente entero de los enteros a y b truncados hacia cero.

+6

O 'a \' quot \ 'B' para los amantes infijos (WOW, realmente puede escapar acentos abiertos insice acentos abiertos con barra invertida?). – delnan

+34

También 'a \' div \ 'b'; si mal no recuerdo, 'quot' trunca (como demas wanted), y' div' rounds hacia cero. Entonces '(-3) \' quot \ '4 == 0', y' (-3) \ 'div \' 4 == -1'. –

+4

+1 para 'div'. Más matemáticamente bien educado, 'quot' es una perra cuando hay números negativos alrededor. – luqui

0

Aquí es lo que hice para que mi propia:

quot' a b 
     | a<b = 0 -- base case 
     | otherwise = 1 + quot' a-b b 
Cuestiones relacionadas