抱歉,标题含糊不清,我想我只是不太了解我的问题,还无法提出这个问题,但就这样吧。我想编写一个递归函数,它需要一系列函数来评估,然后用它们的结果调用自身等等。递归在某个返回数字的函数处停止。
但是,我希望将在递归中的任何点计算的函数 f 包装在函数 s 中,该函数第一次返回初始值(例如 0 或另一个函数 i 的结果)它被评估,然后是评估 f 的结果(以便下次评估时,它返回先前评估的结果,并计算下一个值)。目的是解耦递归,以便它可以继续进行而不会导致 this 。
我想我正在要求一个惰性序列。这是一根管道,一端充满了函数的评估,另一端则输出历史结果。
最佳答案
你的描述让我想起了一些reductions ?归约将执行归约并返回所有中间结果。
user> (reductions + (range 10))
(0 1 3 6 10 15 21 28 36 45)
此处(范围 10)创建一个 0 到 9 的序列。归约重复应用 +,传递 + 的前一个结果和序列中的下一项。返回所有中间结果。您可能会发现查看source很有帮助。减少。
如果您需要为此构建一个测试(检查值),则可以使用函数中的 if 轻松完成(尽管它不会停止遍历 seq)。如果您希望在条件成立时提前退出,那么您需要编写自己的循环/递归,amalloy 已经做得很好了。
我不想这么说,但我怀疑这也可能是 State Monad 的情况,但 IANAMG(我不是 Monad Guy)除外。
关于recursion - 递归函数的lazy-seq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5349063/