2014-01-16 15 views
1

的我想一個簡單的整數除法,我得到這個擁抱實例fractionnal 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) 

我在做什麼錯了?我怎麼能簡單地做一個部門?

回答

5

如果你想做整數除法,只要使用div

lastf n = if even n then 2 * n + 1 else n `div` 2 

的原因是因爲Int沒有實現/運營商,它被保留用於Fractional類型,如FloatDouble。顯然,如果你做3/2並且你想要1.5回來,你不能將它表示爲Int,你必須使用FloatDouble(或實現Fractional typeclass的任何類型)。

+0

所以''是必要的...... – maximegir

+1

@maximegir它也可以寫成'div n 2',''s只是作爲一個函數的中綴 – jozefg

+1

只有當你想用中綴符號。你也可以使用它作爲'div n 2'。這實際上適用於所有帶2個參數的函數:'(+1)'map \'[1,2,3]'會返回'[2,3,4]'或者[1..3] 'zip \'[5,10 ..]'會返回'[(1,5),(2,10),(3,15)]' – bheklilr