Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm Haskell-完成算法的更有效方法?_Algorithm_Haskell - Fatal编程技术网

Algorithm Haskell-完成算法的更有效方法?

Algorithm Haskell-完成算法的更有效方法?,algorithm,haskell,Algorithm,Haskell,我已经创建了一个算法,它接受一个非负的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 - ((calcday

我已经创建了一个算法,它接受一个非负的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、mods等),是否有更简单的方法来编程此函数

编辑:

我使用了下面的建议来简化代码,虽然没有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)
你可以用

a `mod` b
直接得到余数


你可以用它来计算一个子表达式。

我想有些人会这样想

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

我不会说Haskell,但算法通常是这样的:
接受输入,除以60,余数是分钟部分,结果除以24,余数是小时部分,结果是天部分
。因此,您需要将计算链接起来,而不是孤立地执行它们。是的,但是,在Haskell中,您不能设置变量,因此我不确定如何实现这一点。您不需要设置变量,只需将结果直接输入下一步。但是我不确定语法。我的大+1——这是正确的方法。我甚至打算对
quotRem
vs
divMod
进行常规的狡辩,但我认为在这种情况下
quotRem
实际上实现了我对负数的预期!作为哈斯克尔的乞丐,我不知道
quotRem
。这很好,非常简单,谢谢。我曾经找到过div。类似的函数通常列在一起,并在同一节中列出
quotRem