Clojure - 拾取序列元素的非循环方式

时间:2015-12-17 21:04:45

标签: clojure sequence

除了循环遍历序列以及从中获取每个元素之外,还有什么比clojure-idiomatic方法更多?这是我的意思的循环版本:

(def a-seq (list 700 600 500 400 300 200 100))

(loop [s a-seq]
    (if (seq s)
        (do (instrument (first s)) (recur (rest s)))
         "End"))

我将(first s)作为一个频率馈入一个正弦波发生器,如下所示(在泛音lib中):

(use 'overtone.core)
(definst instrument [frequency 0] (sin-osc frequency))

2 个答案:

答案 0 :(得分:1)

使用doseq

(doseq [item a-seq]
  (println item))
(println "End")

答案 1 :(得分:1)

map功能是您想要使用的功能。

(map instrument a-seq)

这将按顺序为instrument中的每个元素调用a-seq函数一次。

请注意,地图是懒惰的,因此您需要使用地图的结果来保证发生任何副作用,或致电doall