【发布时间】:2015-08-07 23:12:06
【问题描述】:
显示比解释更容易。我有这个小函数可以从基数 10 进行基数转换:
demode 0 _ = []
demode n b = m:(demode d b)
where (d, m) = divMod n b
所以,如果我们想看看如何以 9 为基数写出 28,则将 28 9 = [1,3] 解调。 但是,当然,我们必须反转列表,使其看起来像 31。 这可以通过创建一个调用“demode”然后反转它的函数来轻松实现,但是 Haskell 非常酷,而且可能有一种更优雅的方式来表达“在最终情况下(demode 0 _),追加所有内容到一个列表,然后反转该列表”。
请注意,基本转换只是我用来说明问题的一个示例,真正的问题是如何将最终转换应用于递归函数的最后一个结果。
【问题讨论】:
-
与您的问题无关,但我认为您的
demode已损坏:demode 9 9是什么? (顺便说一句,像这样的角落案例是很好的测试用例。)。 -
使用外部函数调用
demode并返回反转结果怎么样? -
demode 9 9 = [0 , 1] -> 10,不是吗?关于外部功能:我想到并在上面提到过。当然,对于这种情况,它很容易而且足够好,但在其他一些情况下,它会很有用。此外,改进你的 haskell 语法也不错。