clojure-italy

🇮🇹
reborg 2020-01-27T09:17:33.003400Z

Buon inizio settimana!

2020-01-27T12:02:56.003700Z

giorno a tutti

2020-01-27T12:05:13.004500Z

sto cercando un modo di implementare qualcosa di questo tipo, ho una mappa di funzioni tipo

(def mapping
  {[:a :b] #(* 1000 %)
   [:b :c] #(* 2 %)})

2020-01-27T12:05:38.005200Z

vorrei automaticamente generare tutto lo spazio cartesiano di funzioni, invertedendo o componendo funzioni (assumendo che siano transitive etc)

2020-01-27T12:05:42.005500Z

(def generated-mapping
  {[:a :b] #(* 1000 %)
   [:b :a] #(/ % 1000)
   [:b :c] #(* 2 %)
   [:c :b] #(/ % 2)
   [:a :c] (comp f-a-b f-a-c)
   ...})

2020-01-27T12:06:04.006300Z

vorrei generare automaticamente una cosa del genere

2020-01-27T12:06:14.006800Z

qualche suggerimento su che algoritmi usare?

2020-01-27T12:08:01.007500Z

probabilmente dovrei prima fare gli inversi e poi un BFS per "riempire" tutta la tabella

2020-01-27T12:08:28.008300Z

forse gli inversi non posso farli automaticamente comunque se non riesce a trovare l'inversa in automatico, ma vabbeh quelli li posso scrivere per esteso

reborg 2020-01-27T12:15:52.009300Z

gli inversi possono venire con qualcosa tipo

(let [[op op1 op2] (replace {'* '/ '/ '*} '(* 1000 %))] `(~op ~op2 ~op1))

2020-01-27T12:21:17.009900Z

eh ma non e' sempre una semplice moltiplicazione/divisione

2020-01-27T12:22:20.011200Z

dovrei mappare da qualche parte come gli inversi, ma vabbeh non ha senso forse, in totale ho 25 possibili conversioni possibili. scrivendone il meno possibile sono 4, con gli inversi 8

2020-01-27T18:19:55.012500Z

ok ancora non funziona tutto ma penso di sapere come fare

2020-01-27T18:20:19.013100Z

da

(def mapping
  {[:a :b] #(* 1000 %)
   [:b :c] #(* 2 %)})
estraggo il possible path, in questo caso (:a 😛 :c)

2020-01-27T18:20:42.014Z

maledetto mi cambia la ":b" a tutti i costi

2020-01-27T18:21:31.015300Z

una volta che ho il path posso e :a :c come input della trasformazione da generare posso fare una roba del genere

(defn get-subs
  [from-type]
  (->> flow
       (drop-while #(not= from-type %))
       (partition 2)))


(defn get-transformation*
  [from-type to-type]
  ;; need to add the to-type here and then it's done
  (apply comp
         (map
          #(get conversions %)
          (get-subs from-type))))

2020-01-27T18:22:03.016300Z

facendo le partizioni di tutte le transformazioni intermedie e componendole

2020-01-27T18:22:37.017100Z

devo solo capire adesso come prendere una lista fino a un certo valore tipo [1 2 3 4] e voglio solo da 2 a 3

2020-01-27T18:22:56.017600Z

drop-while funziona per il valore iniziale ma take-while non per il valore finale

2020-01-27T18:23:09.018100Z

una volta risolto questo penso che funzioni tutto

bronsa 2020-01-27T20:49:54.018700Z

subvec per vettori

2020-01-27T22:33:30.019200Z

Eh no perché non sono numeri

2020-01-27T22:33:40.019600Z

Tutto risolto su #clojure comunque

2020-01-27T22:34:28.021200Z

Sono abbastanza soddisfatto del risultato, fra non molto magari rilascio OSS questa mini libreria

2020-01-27T22:35:01.022100Z

Che magari serve a qualcun altro