我需要在Clojure中执行一段代码,如下所示:
(map function coll)
然而,我需要延迟每个连续函数调用之间的时间间隔。也就是说,我想先使用第一个项目调用 function
,然后休眠10秒钟,然后再使用第二个项目进行调用,以此类推。
如何实现这一目标?
提前感谢您的帮助。
我需要在Clojure中执行一段代码,如下所示:
(map function coll)
然而,我需要延迟每个连续函数调用之间的时间间隔。也就是说,我想先使用第一个项目调用 function
,然后休眠10秒钟,然后再使用第二个项目进行调用,以此类推。
如何实现这一目标?
提前感谢您的帮助。
为了完整起见,在评论中讨论后,这是一个使用doseq
的实现,包装在一个简洁的小函数中:
(defn doseq-interval
[f coll interval]
(doseq [x coll]
(Thread/sleep interval)
(f x)))
这里是如何调用它的:
(doseq-interval prn (range 10) 1000)
map
,因为它提供了一个分块序列,而你似乎实际上正在寻找与时间相关的副作用。坦率地说,当时间很重要时,我倾向于使用core.async
;编写一个将通道读取与超时操作交替进行的 goroutine 将非常自然。 - Charles Duffycoll
中的每个元素调用function
来产生副作用,那么你可能希望使用doseq
函数,在每次调用之间加上一个延迟。 - Diego Baschdoseq
正是我正在寻找的。谢谢,Charles 和 Diego。 - Tony Duan