我创建了一个算法,该算法采用一个非负的Int值(代表分钟总数),并返回一个三元组,该整数给出了对应的(天,小时,分钟)。

这是我的代码:

calcdays :: Int -> Int
calcdays x = x `div` (24*60)

calchours :: Int -> Int
calchours x = (x - ((calcdays x)*24*60)) `div` 60

calcmins :: Int -> Int
calcmins x = (x - ((calcdays x)*24*60) - ((calchours x)*60))

dayshoursmins :: Int -> (Int,Int,Int)
dayshoursmins x = (calcdays x, calchours x, calcmins x)

仅使用基本的Haskell操作(后卫,div,mod等),是否有更简单的方法来对该函数进行编程?

编辑:

我使用下面的建议使此代码更简单,尽管不如qoutRem解决方案那么简单,但我想我可以发布它:
calcdays :: Int -> Int
calcdays x = x `div` (24*60)

calchours :: Int -> Int
calchours x = (x `mod` (24*60)) `div` 60

calcmins :: Int -> Int
calcmins x = (x `mod` (24*60)) `mod` 60

dayshoursmins :: Int -> (Int,Int,Int)
dayshoursmins x = (calcdays x, calchours x, calcmins x)

最佳答案

我认为这样的

dayshoursmins x = (d,hr,mr) where
 (h,mr) = quotRem x 60
 (d,hr) = quotRem h 24

关于algorithm - Haskell-更有效的方法来完成算法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33781107/

10-11 22:33
查看更多