Buon inizio settimana!
giorno a tutti
sto cercando un modo di implementare qualcosa di questo tipo, ho una mappa di funzioni tipo
(def mapping
{[:a :b] #(* 1000 %)
[:b :c] #(* 2 %)})
vorrei automaticamente generare tutto lo spazio cartesiano di funzioni, invertedendo o componendo funzioni (assumendo che siano transitive etc)
(def generated-mapping
{[:a :b] #(* 1000 %)
[:b :a] #(/ % 1000)
[:b :c] #(* 2 %)
[:c :b] #(/ % 2)
[:a :c] (comp f-a-b f-a-c)
...})
vorrei generare automaticamente una cosa del genere
qualche suggerimento su che algoritmi usare?
probabilmente dovrei prima fare gli inversi e poi un BFS per "riempire" tutta la tabella
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
gli inversi possono venire con qualcosa tipo
(let [[op op1 op2] (replace {'* '/ '/ '*} '(* 1000 %))] `(~op ~op2 ~op1))
eh ma non e' sempre una semplice moltiplicazione/divisione
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
ok ancora non funziona tutto ma penso di sapere come fare
da
(def mapping
{[:a :b] #(* 1000 %)
[:b :c] #(* 2 %)})
estraggo il possible path, in questo caso (:a
😛 :c)
maledetto mi cambia la ":b" a tutti i costi
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))))
facendo le partizioni di tutte le transformazioni intermedie e componendole
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
drop-while funziona per il valore iniziale ma take-while non per il valore finale
una volta risolto questo penso che funzioni tutto
subvec
per vettori
Eh no perché non sono numeri
Tutto risolto su #clojure comunque
Sono abbastanza soddisfatto del risultato, fra non molto magari rilascio OSS questa mini libreria
Che magari serve a qualcun altro