Требуется экземпляр дробного int, простая функция
Я хочу простое целочисленное деление, и я получаю это в объятиях
Hugs> :load prog.hs
ERROR file:prog.hs:30 - Instance of Fractional Int required for definition of lastf
Моя простая программа выглядит так
lastf::Int->Int
lastf 1 = 0
lastf n = if even n then (2*n+1) else (n/2)
Что я делаю неправильно? Как я могу просто сделать деление?
1 ответ
Решение
Если вы хотите сделать целочисленное деление, просто используйте div
:
lastf n = if even n then 2 * n + 1 else n `div` 2
Причина в том, что Int
не реализует /
оператор, он зарезервирован для Fractional
типы, как Float
а также Double
, Очевидно, что если вы делаете 3 / 2
и вы хотите 1.5
назад, вы не можете представить это как Int
, вам придется использовать Float
или же Double
(или любой тип, который реализует Fractional
класс типов).