7

シーケンス内の n 番目ごとの要素に関数をマップする適切な方法は何ですか? のようなもの(map-every-nth fn coll n)で、n 番目ごとの要素のみが変換された元のシーケンスを返します。たとえば、 (map-every-nth inc (range 16) 4) は (0 1 2 4 4 5 6 8 8 9 10 12 12 13 14 を返します)。 16)

4

3 に答える 3

12

これを試して:

(defn map-every-nth [f coll n]
  (map-indexed #(if (zero? (mod (inc %1) n)) (f %2) %2) coll))

(map-every-nth inc (range 16) 4)
> (0 1 2 4 4 5 6 8 8 9 10 12 12 13 14 16)
于 2012-04-26T02:23:09.167 に答える
1

これは、受け入れられている回答よりもシンプルでクリーンになることをお勧めします。

(defn map-every-nth [f coll n]
  (map f (take-nth n coll)))

これは知っておくと便利です: http://clojuredocs.org/clojure_core/clojure.core/take-nth

于 2012-07-27T03:06:38.883 に答える