recursion - 递归函数的lazy-seq

标签 recursion clojure sequence lazy-evaluation

抱歉,标题含糊不清,我想我只是不太了解我的问题,还无法提出这个问题,但就这样吧。我想编写一个递归函数,它需要一系列函数来评估,然后用它们的结果调用自身等等。递归在某个返回数字的函数处停止。

但是,我希望将在递归中的任何点计算的函数 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/

相关文章:

Java-为什么我的递归 Draw tree 方法输出不正确

java - 链表,向后递归

postgresql - 对根元素 postgres 的 CTE 查询

clojure - Clojure Inspector(检查)ui 按钮有什么作用吗?

clojure - 如何在 Clojure 中使用 Ring 运行 Jetty 示例

vector - Clojure - 为一个人定义一个数据结构

r - 用 R data.table 中的序列填充 NA 值

jQuery 顺序列表问题

java - 无法理解递归阶乘

python - 测试某个值是否不是由迭代器产生的