第二次循环序列时为空序列
Empty sequence when looping on a sequence for the second time
在节中,我想在一个序列上循环两次。
我有类似的东西:
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
在 function1
和 function2
中,我都在循环播放序列。但是当到达function2
时,序列为空。
一个Seqable
是一个延迟计算的值序列,一般来说,你只能迭代一次。
因此,一般的解决方案是首先存储所有值(例如在一个元组中),然后您可以将这个元组传递给您的每个函数:
val t = to-tuple(s)
[function1(t), function2(t)]
但是,对于您的特定情况,很明显 function1
和 function2
可以相互独立计算。所以是可以遍历一次序列,然后同时计算function1
和function2
的结果。 core
中有一个奇特的函数,叫做 fork-on-seq
,可以让你这样做:
fork-on-seq(s, function1, function2)
在节中,我想在一个序列上循环两次。
我有类似的东西:
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
在 function1
和 function2
中,我都在循环播放序列。但是当到达function2
时,序列为空。
一个Seqable
是一个延迟计算的值序列,一般来说,你只能迭代一次。
因此,一般的解决方案是首先存储所有值(例如在一个元组中),然后您可以将这个元组传递给您的每个函数:
val t = to-tuple(s)
[function1(t), function2(t)]
但是,对于您的特定情况,很明显 function1
和 function2
可以相互独立计算。所以是可以遍历一次序列,然后同时计算function1
和function2
的结果。 core
中有一个奇特的函数,叫做 fork-on-seq
,可以让你这样做:
fork-on-seq(s, function1, function2)