Clojurians
#clojure-italy
<
2018-07-03
>

This page is not created by, affiliated with, or supported by Slack Technologies, Inc.

manuel06:07:01

(e con questo messaggio, il faccione di Di Maio si toglie dallo schermo e posso tornare a vivere serenamente)

skuro07:07:35

display // resolution troppo alta, a me servono un po' piu' righe

skuro07:07:39

ecco, quasi fatto

skuro07:07:44

ah, buongiorno comunque!

justalanm07:07:36

Se mettete al 120% si leva :grin:

reborg09:07:42

Grunterboch

bronsa09:07:23

madonna che caldo che fa a padova

bronsa09:07:17

io e le mie idee di farmi una settimana da remoto a luglio

reborg09:07:35

urk, saro' in ita in agosto, a quel punto spero che 1. qui piova a catinelle 2. li' ci sia il corridoio artico

bronsa09:07:31

sta notte ho dormito in cantina

mdallastella11:07:56

@bronsa in teoria pomeriggio/sera dovrebbe piovere, magari rinfresca

justalanm11:07:28

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

mdallastella12:07:44

domanda: sto studiando un po' i transducer e, grazie anche a @reborg, comincio (forse) a capirci qualcosa. Ho implementato un transducer tgroup-by così: `

mdallastella12:07:54

(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)))))

mdallastella12:07:21

premetto che effettivamente con sequence non da il risultato sperato

mdallastella12:07:34

ma con transduce

mdallastella12:07:06

Ora: ho scritto una cagata (cioé è concettualmente errato) o no?

mdallastella12:07:59

(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}])

mdallastella12:07:25

;;=> {"1" ({:id "1", :h 5} {:id "1", :b 2} {:id "1", :a 0}), "2" ({:id "2", :c 3})}

mdallastella12:07:06

(mi sono accorto ora che /giustamente/ scarta l'ultimo, non ha :id)

reborg14:07:53

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.

mdallastella14:07:23

Giusto, non ci avevo pensato

reborg14:07:11

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)

mdallastella14:07:29

perché giustamente lavora per singolo elemento, non per collezione

mdallastella14:07:08

eppure si trovano delle implementazioni "transducer" di group-by in giro fatte più o meno così

mdallastella14:07:16

dite che funzionano fintantoché si trovano in fondo alla catena?

bronsa14:07:56

group-by semanticamente non e` un'operazione amenable ad essere un transducer

bronsa14:07:04

proprio per il motivo che dice @reborg

bronsa14:07:57

@mdallastella si`, ma a quel punto che senso ha che sia un transducer?

reborg16:07:01

Si', giusto... quello che pensavo prima e' poi (map group-by)

reborg16:07:28

Quindi se l'operazione ha senso solo se consuma l'intero input (group-by, sort, frequencies, etc.) non puo' essere un xf