ST
Size: a a a
ST
ND
(loop [acc []
[a & arest] [:qoo :boo :moo]
[b & brest] [:q :b]]
(if-not (or a b)
acc
(recur (conj acc (or (and a b [a b]) a b))
arest
brest)))IG
(defn foo-moo [foo moo]
(loop [acc []
[a & arest] foo
[b & brest] moo]
(cond
(and a b)
(recur (conj acc [a b]) arest brest)
(or a b)
(recur (conj acc (or a b)) arest brest)
:else
acc)))
ST
(defn map2
([f c1 c2]
(lazy-seq
(let [s1 (seq c1) s2 (seq c2)]
(when (or s1 s2)
(cons (cond (and s1 s2) (f (first s1) (first s2))
s1 (first s1)
s2 (first s2))
(map2 f (rest s1) (rest s2))))))))
=> #'user.repl/map2
(map2 vector [:qoo :boo :moo] [:q :b 2 3])
=> ([:qoo :q] [:boo :b] [:moo 2] 3)
ST
(let [a [:qoo :boo :moo]
b [:q :b]
[a1 a2] (split-at (count b) a)
[b1 b2] (split-at (count a) b)]
(into [] (concat (map vector a1 b1) a2 b2)))
PP
(defn interleave-all [coll-a coll-b]Грубо, на каждом шаге брать очередной элемент из первой и в рекурсивном вызове менять коллекции местами, пока не получим пустую коллекцию в первом аргументе — тогда оставшийся хвост второй можно вернуть как есть.
(if (seq coll-a)
(lazy-seq
(cons (first coll-a)
(interleave-all coll-b (rest coll-a))))
coll-b))
E
ST
(let [a [:qoo :boo :moo]
b [:q :b]
[a1 a2] (split-at (count b) a)]
(into (mapv vector a1 b) a2))
ИИ
IG
split-at тут явно лишний. Он и тяжелый оченьIG
[(take n coll) (drop n coll)]ST
(let [a [:qoo :boo :moo]
b [:q :b]]
(into (mapv vector a b) (drop (count b) a)))
ST
(let [a [:qoo :boo :moo]
b [:q :b]]
(->> a (into [] (map-indexed (fn [i x] (if-let [y (get b i)] [x y] x))))))
ST
;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
(let [a [:qoo :boo :moo]
b [:q :b]]
(into (mapv vector a b) (drop (count b) a)))
;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
)
Evaluation count : 372606 in 6 samples of 62101 calls.
Execution time mean : 1,470864 µs
Execution time std-deviation : 56,910541 ns
Execution time lower quantile : 1,405616 µs ( 2,5%)
Execution time upper quantile : 1,542725 µs (97,5%)
Overhead used : 8,155308 ns
;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
(let [a [:qoo :boo :moo]
b [:q :b]]
(->> a (into [] (map-indexed (fn [i x]
(if-let [y (.valAt b i)]
[x y]
x))))))
;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
)
Evaluation count : 2017236 in 6 samples of 336206 calls.
Execution time mean : 324,780651 ns
Execution time std-deviation : 42,653861 ns
Execution time lower quantile : 292,930337 ns ( 2,5%)
Execution time upper quantile : 397,782608 ns (97,5%)
Overhead used : 8,155308 ns
AG
project/. В котором лежит bb.edn и config.edn. И есть в проекте модули /modules/module-1 в которых лежат bb.edn. config.edn. Но в каждой бабашке каждого модуля не хочется делать (def config (read-config "../../config.edn"))AG
IS
IS
IS