This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2018-07-03
Channels
- # aleph (3)
- # beginners (139)
- # boot (3)
- # cider (12)
- # cljs-dev (18)
- # clojure (100)
- # clojure-dev (21)
- # clojure-dusseldorf (5)
- # clojure-germany (1)
- # clojure-italy (35)
- # clojure-nl (26)
- # clojure-spec (4)
- # clojure-uk (60)
- # clojurescript (11)
- # clojutre (4)
- # cursive (21)
- # data-science (21)
- # datomic (47)
- # editors (3)
- # emacs (2)
- # events (4)
- # figwheel (2)
- # fulcro (28)
- # jobs (27)
- # jobs-discuss (21)
- # lein-figwheel (3)
- # midje (2)
- # off-topic (20)
- # om-next (4)
- # onyx (10)
- # overtone (1)
- # pedestal (2)
- # portkey (14)
- # re-frame (71)
- # reagent (44)
- # reitit (11)
- # remote-jobs (1)
- # ring-swagger (4)
- # shadow-cljs (64)
- # spacemacs (11)
- # testing (2)
- # tools-deps (8)
- # vim (8)
(e con questo messaggio, il faccione di Di Maio si toglie dallo schermo e posso tornare a vivere serenamente)
urk, saro' in ita in agosto, a quel punto spero che 1. qui piova a catinelle 2. li' ci sia il corridoio artico
@bronsa in teoria pomeriggio/sera dovrebbe piovere, magari rinfresca
Guardate, sono un paio di mesi che alterna qualche giorno di caldo incredibile a qualche giorno di pioggia + fresco e pare continuerà così fino a metà-fine agosto
domanda: sto studiando un po' i transducer e, grazie anche a @reborg, comincio (forse) a capirci qualcosa.
Ho implementato un transducer tgroup-by
così:
`
(defn tgroup-by [k]
(fn [rf]
(fn
([] (rf))
([result] (rf result))
([result el]
(if-let [v (get el k)]
(rf result (update result v conj el))
result)))))
premetto che effettivamente con sequence
non da il risultato sperato
ma con transduce
sì
Ora: ho scritto una cagata (cioé è concettualmente errato) o no?
(transduce (tgroup-by :id) conj {} [{:id "1" :a 0}
{:id "1" :b 2}
{:id "2" :c 3}
{:id "1" :h 5}
{:if "2" :g 6}])
;;=> {"1" ({:id "1", :h 5} {:id "1", :b 2} {:id "1", :a 0}), "2" ({:id "2", :c 3})}
(mi sono accorto ora che /giustamente/ scarta l'ultimo, non ha :id
)
Interessante @mdallastella. C'e' un problema semantico pero', nel senso che mi aspetterei che un group-by
transducer esegua un group "completo" prima di passare il controllo downstream al prossimo transducer. Invece quello che hai produce un raggruppamento parziale con i dati che riceve e si aspetta che nessun altro transducer nella catena alteri il risultato (se lo fa non hai il group-by che ti aspetti). E' effettivamente un reduce
camuffato da transduce
.
Giusto, non ci avevo pensato
Potresti indagare una versione stateful, consumare l'input completamente per produrre il grouping e passare la palla al transducer successivo (che si becca un mappone)
perché giustamente lavora per singolo elemento, non per collezione
eppure si trovano delle implementazioni "transducer" di group-by in giro fatte più o meno così
dite che funzionano fintantoché si trovano in fondo alla catena?
@mdallastella si`, ma a quel punto che senso ha che sia un transducer?
giusto