2013-10-15 4 views
2

У меня есть функция, которая, взятая двумя ints в качестве параметров, должна вернуть результат их деления.Отдел в Haskell, Тип класса

Я, однако, не уверен в некоторых вещах.

Во-первых, каков будет тип возврата? I.e., 4/2 вернет 2, поэтому я предполагаю, что Int, но 5/3 ...? И что это лучший оператор для этого?

ответ

6

div является целочисленным делением в haskell. Он будет округлен, как и C. Так

4 `div` 2 = 2 
5 `div` 3 = 1 

Для регулярного деления нужно преобразовать в Fractional типа с fromIntegral.

(/) :: Fractional a => a -> a -> a 

Так оператор (/) принимает два Fractional типов и возвращает тот же дробный тип. Примерами могут служить Rational, Double и Float.

+0

Привет, извините, я все еще относительно не уверен, если бы мне нужна функция «getDiv», которая принимает Ints x и y и параметры, как мне ее структурировать? – MrD

+1

@ DarioP, такая функция уже существует. Это называется 'div'. Вы можете сделать 'div 5 3' или' 5 \ 'div \' 3'. Они имеют в виду вещь. Вы можете использовать '\' 'вокруг любой функции с (по крайней мере) двумя аргументами, чтобы превратить ее в функцию infix. Так же, как вы можете сделать '5.3/2.4' или' (/) 5.3 2.4' –

+0

Если вы хотите регулярное деление с результатом типа 'Fractional':' getDiv x y = fromIntegral x/fromIntegral y'. В этом случае, однако, скорее всего, просто использовать 'fromIntegral' напрямую, чтобы преобразовать значения' Int', не беспокоясь о отдельной функции. – duplode

Смежные вопросы