clojure:减少:应用函数n次,保持中间结果

eav*_* db 1 clojure

问题陈述

给定n,x,f:我想要输出表格:

[x, f(x), f(f(x)), f(f(f(x))), ..., f^{n-1}(x)]
Run Code Online (Sandbox Code Playgroud)

现有解决方案

这可以通过减少来完成

(reductions
  (fn [state _] (f state))
  state
  (range n))
Run Code Online (Sandbox Code Playgroud)

是否存在提供更短解决方案的原语?

arr*_*dem 8

你想要的是clojure.core /迭代,它提供f -> x -> [x, f(x), f^2(x), f^3(x), ...]clojure.core /取它提供了一种以片中的第一n关一个序列的元素.take是懒惰的,iterate所以不能保证副作用.