(defn dissoc-by-kv ;TODO: refactor to dissoc-by (k,v)
"Dissociate entities selected by key, value"
[m k-pred v-pred]
(apply dissoc m (for [[k v] m :when (and (k-pred k) (v-pred v))] k)))
(s/fdef update-many
:args (s/cat :m map?, :k-pred (s/fspec :args (s/cat :v any?) :ret any?),
:f ifn?, :args (s/* any?))
:ret map?
:fn #(= (-> % :args :m keys) (-> % :ret keys)))
(defn update-many
"Select and update map entry. If no selected key, return map
as is. NOTE: Only maps are allowed (not associative).
Impossible to add an new entry by new unknown key."
[m k-pred f & args]
(reduce #(apply update %1 %2 f args)
m
(filter k-pred (keys m))))
(defn spread
"Spread one value(selected by key) of map to <maps>. m -> <m>
If k is not in m then return [m].
vs is value of k in m. vs = (k m). vs must be seq or set,
otherwise throw exception."
[m k]
(if (contains? m k)
(let [vs (m k)]
(assert (counted? vs))
(map (fn [m v] (assoc m k v)) (repeat m) vs))
[m]))
리슾 맛좀 봐랏
짧게 쓰면 모니터 하나에 3 칼럼 쌉가능
리슾 쓰고 광명 찾자
spec 우욱 - dc App
마 근로저 spec 무 밨나 디진다 아이가
근로저에서는 타입 안 묵고 프리디킷 제너레이터 다 쓰까서 노나 묵는다
그냥 타입쓰는게 - dc App
물론 타입은 런타임에 검사되고, spec은 그냥 predicate을 런타임/테스트에 때려박아 검사할 수 있어서 좋음
))))))
s/fdef 뭔데 ㅅㅂ;
저게 clojure.spec이라능
spec::function_def - dc App
clojure는 앞으로 c5e라고 불러드림
clj가 국룰이지
스게...