如何更新在递归函数中用let创建的值

时间:2018-09-22 02:50:35

标签: haskell

我正在尝试编写一个递归函数,该函数一直持续到达到一定数量为止。该函数有两个参数。第一个是字符串列表,第二个是一个数字,它告诉我应该执行多少次迭代。我一开始就尝试使用let,但是我很难弄清楚如何增加使用let声明的值。

我的功能看起来像这样。

    somefunction l n = let m = 0 in 
                       if (m < n) then somefunction (otherfunction l m) n
                       else l

这有一个明显的问题,就是我不会在任何地方增加m的值,因此该函数永远不会终止。我仍然习惯于haskell,因此语法给了我一些麻烦。我觉得解决该问题的方法应该很简单,但是我似乎无法弄清楚该如何做。我曾经考虑过使用一个可以增加m值并可能调用other函数的辅助函数。这似乎是要走的路,但是我不确定如何将它们放在一起。

这是一项家庭作业,因此,我希望您能获得有关如何解决此问题的任何提示。我所有其他功能都在工作,我只需要使它们一起工作即可。

2 个答案:

答案 0 :(得分:2)

您确实确实需要一个辅助函数,该函数每次都使用更新后的参数进行调用。

somefunction l n = loop 0
  where
    loop m
      | m < n = ...
      | otherwise = ...

答案 1 :(得分:0)

考虑了一段时间后,我终于找到了解决方案。我当时正在考虑使用一个辅助函数来跟踪当前的迭代,但是事实证明这有点困难。最后,我意识到我可以简单地以相反的顺序调用递归函数,这样该函数将使用n并一直下降到0,然后再调用otherfunction。这样,结果以正确的顺序打印,而我不必使用辅助功能。