哈斯克尔除法算法函数



我的教授给我分配了一个非常基本的实验室,大部分已经完成。从本质上讲,它应该做的事情类似于divMod。它应该使用递归函数输出商和余数。下面是代码。我不太确定语法方面发生了什么,如果有人可以解释"填写此内容"部分中的内容。我知道 a

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--

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

在递归

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

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

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

最新更新