0

在节中,我想在一个序列上循环两次。

我有类似的东西:

public defn function1-and-function2 (s:Seqable<Double>) -> [Double, Double]:
   [function1(s), function2(s)]

public defn function1 (s:Seqable<Double>) -> Double

public defn function2 (s:Seqable<Shape>) -> Double

function1function2中,我都在循环序列。但是当到达 时function2,序列是空的。

4

1 回答 1

0

ASeqable是一个延迟计算的值序列,一般来说,您只能遍历它一次。

因此,一般的解决方案是首先存储所有值(例如在元组中),然后您可以将此元组传递给您的每个函数:

val t = to-tuple(s)
[function1(t), function2(t)]

但是,对于您的特定情况,很明显function1function2可以彼此独立计算。所以可以对序列进行一次迭代,然后同时计算 和 的function1结果function2core调用中有一个花哨的函数fork-on-seq可以让你这样做:

fork-on-seq(s, function1, function2)
于 2021-05-10T20:53:04.190 回答