This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2021-02-03
Channels
- # announcements (2)
- # atom-editor (1)
- # babashka (6)
- # beginners (49)
- # calva (39)
- # clj-kondo (20)
- # clojure (41)
- # clojure-australia (1)
- # clojure-europe (33)
- # clojure-germany (8)
- # clojure-italy (2)
- # clojure-losangeles (1)
- # clojure-norway (3)
- # clojure-spec (5)
- # clojure-uk (48)
- # clojurescript (147)
- # conjure (24)
- # core-logic (1)
- # datahike (6)
- # datomic (14)
- # emacs (10)
- # events (1)
- # fulcro (11)
- # garden (1)
- # girouette (2)
- # honeysql (16)
- # jobs (3)
- # kaocha (3)
- # malli (5)
- # meander (7)
- # off-topic (49)
- # pathom (50)
- # portal (3)
- # reagent (4)
- # reitit (7)
- # rewrite-clj (3)
- # ring (3)
- # sci (4)
- # shadow-cljs (46)
- # spacemacs (10)
- # sql (3)
- # tools-deps (57)
How do I get something like this?
[:a 1 2 3 :b 4 5 :c 6 7 8 9 ...]
;; => {:a [1 2 3] :b [4 5] :c [6 7 8 9] ...}
This one in the cookbook is pretty easy to modify to give you want you what you are looking for. https://github.com/noprompt/meander/blob/epsilon/doc/cookbook.md#multiple-variable-length-sub-sequences
(m/rewrite [:a 1 2 3 :b 4 5 :c 6 7 8 9]
[] [] ; The base case for no values left
[(m/pred keyword? ?x) . (m/pred int? !ys) ... & ?more]
{& [[?x [!ys ...]] & (m/cata ?more)]})
How to check if a map does not have a given key?
(m/rewrite {:m {:a 1 :b 2 :c 3}
:selector :c}
{:m {?s ?k}
:selector ?s} true)
;; => true
(m/rewrite {:m {:a 1 :b 2}
:selector :c}
{:m {?s nil}
:selector ?s} true)
;; => nil
(m/rewrite {:m {:a 1 :b 2}
:selector :c}
{:m (m/not {?s ?k})
:selector ?s} true)
;; => nil
(m/rewrite {:m {:a 1 :b 2}
:selector :d}
{:selector ?s
:m (m/not {?s (m/some)})}
true)
Just need to use a some here. Meander will match for keys that don’t exist. Changing this behavior is on my personal wish list for zeta.