我的教授给我分配了一个非常基本的实验室,大部分已经完成。从本质上讲,它应该做的事情类似于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 (___, ___)