Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
clojure:减少:应用函数n次,保留中间结果 问题陈述_Clojure - Fatal编程技术网

clojure:减少:应用函数n次,保留中间结果 问题陈述

clojure:减少:应用函数n次,保留中间结果 问题陈述,clojure,Clojure,给定n,x,f: 我想要表单的输出: [x, f(x), f(f(x)), f(f(f(x))), ..., f^{n-1}(x)] 现有解决方案 这可以通过降低成本来实现 (reductions (fn [state _] (f state)) state (range n)) 问题 是否有一个原语提供了一个较短的解决方案?您需要的是,它提供了f->x->[x,f(x),f^2(x),f^3(x),…]并提供了一种从序列中切掉第一个n元素的方法take和iterate一样懒惰,

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

[x, f(x), f(f(x)), f(f(f(x))), ..., f^{n-1}(x)]
现有解决方案 这可以通过降低成本来实现

(reductions
  (fn [state _] (f state))
  state
  (range n))
问题
是否有一个原语提供了一个较短的解决方案?

您需要的是,它提供了
f->x->[x,f(x),f^2(x),f^3(x),…]
并提供了一种从序列中切掉第一个
n
元素的方法
take
和iterate一样懒惰,因此没有副作用的保证。

你想要的是,它提供了
f->x->[x,f(x),f^2(x),f^3(x),…]
并且提供了一种从序列中切掉第一个
n
元素的方法
take
和iterate一样懒惰,所以没有副作用的保证。

不会这样做吗?对于您的特定需求,我认为应该是
(取n(迭代fx))
。不这样做吗?对于您的具体需求,我认为应该是
(take n(iterate f x))
。虽然这两个都是懒惰的,但就我从源代码中看到的来看,
iterate
take
都不受分块的影响。我也不知道如何实现
迭代
,以利用并行性。我想这会有一个内置的。谢谢仅供参考,我编辑了你的答案,删除了关于分块和懒惰的论述,因为(1)它与所问的问题没有真正的联系,(2)我认为它是错误的((a)
iterate
没有实现为分块序列,(b)对于任意的
f
,你将如何计算
f^n(x)
无需首先计算
f^(n-1)(x)
?)。如果您不这么认为,请随时回复。虽然这两种方法都很懒惰,但就我从源代码中看到的来看,
iterate
take
都不受分块的影响。我也不知道如何实现
迭代
,以利用并行性。我想这会有一个内置的。谢谢仅供参考,我编辑了你的答案,删除了关于分块和懒惰的论述,因为(1)它与所问的问题没有真正的联系,(2)我认为它是错误的((a)
iterate
没有实现为分块序列,(b)对于任意的
f
,你将如何计算
f^n(x)
无需首先计算
f^(n-1)(x)
?)。如果你不这么认为,请随时回复。