2010-12-05 31 views
63

J'ai besoin d'une fonction qui obtient deux Int s (a et b) et renvoie A/B comme Int. Je suis sûr que A/B sera toujours un nombre entier.Diviser Int en int et retourner int

Voici ma solution:

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

Mais vous voulez trouver une solution plus simple. Quelque chose comme ceci:

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

Comment puis-je diviser Int en Int et obtenir Int?

Répondre

112

Pourquoi ne pas simplement utiliser quot? Est le quotient entier des entiers a et b tronqués vers zéro.

+6

Ou 'a \' quot \ 'b' pour les amateurs de infix (wow, vous pouvez réellement échapper insice contre-apostrophes avec des accents graves backslash?). – delnan

+34

Aussi 'a \' div \ 'b'; si je me souviens bien, 'quot' tronque (comme demas voulu), et' div' tourne vers zéro. Donc '(-3) \' quot \ '4 == 0', et' (-3) \ 'div \' 4 == -1'. –

+4

+1 pour 'div'. Plus mathématiquement sage, 'quot' est une chienne quand il y a des nombres négatifs autour. – luqui

0

Voici ce que je l'ai fait faire mon propre:

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