Haskell除法算法函数

时间:2014-02-10 22:33:28

标签: haskell

我的教授为我指定了一个基本完成的基础实验室。基本上它应该做什么类似于divMod。它应该使用递归函数输出商和余数。下面是代码。如果有人可以解释“填充此内容”部分可能会出现的内容,我不太确定语法上是什么。我明白了一个< b是简单的情况,意味着商为零,余数为a。所以q = 0,r = a。这最终将通过从a重复减去b来实现。设17是a和5是b,如下:17-5 = 12然后12-5 = 7然后7-5 = 2这意味着商是3,余数是2.所以我理解发生了什么我就是不能把它写在哈斯克尔。谢谢你的帮助。对不起这个超级冗长的问题。

divalg :: Int -> Int -> (Int, Int)
divalg a b | a < b = --Fill this in--
           | otherwise = let (q, r) = divalg (a - b) b 
            in --Fill this in--

1 个答案:

答案 0 :(得分:3)

从类型签名中,您可以看到divalg需要两个Int并返回一对Int s,您正确地将其标识为商和余数。因此,在基本情况下(a < b),你应该这样做:返回一个包含商和余数的元组。

在递归的情况下,已经写入了递归调用。在考虑递归时,假设递归调用“做正确的事”。在这种情况下,“正确的事情”是返回(a-b)/b的商和余数。我将把数学留给你,但基本的想法是你需要修改元组(q,r)以获得一个包含a/b的商/余数的新元组。我怎么知道这是正确的做法?因为型号签名告诉了我。

简而言之,您的代码将如下所示:

| a < b = (___, ___)
| otherwise = let ...
 in (___, ___)