clojure-italy

šŸ‡®šŸ‡¹
reborg 2020-01-29T08:48:13.024800Z

More giorn

helios 2020-01-29T09:17:02.025Z

cia'

reborg 2020-01-29T10:05:45.026300Z

appena ordinato un raspberry pi 4 con lā€™idea di giocarci a minecraft attraverso pythonAPI (https://projects.raspberrypi.org/en/projects/getting-started-with-minecraft-pi/5) ma ovviamente la domanda sorge spontaneaā€¦. clojureAPI? šŸ˜¬

2020-01-29T10:17:18.026500Z

https://github.com/cnuernber/libpython-clj

šŸ‘ 1
reborg 2020-01-29T10:18:15.027Z

juicy!

2020-01-29T10:22:11.027300Z

lei ci sta lavorando parecchio https://twitter.com/gigasquid?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor

reborg 2020-01-29T12:38:14.027800Z

Yay or nay?

(defn cartesian-prod [colls]
  (let [vars (vec (take (count colls) (repeatedly gensym)))
        binds (vec (interleave vars colls))]
    (eval `(for ~binds ~vars))))

(let [all [[1 2] [3 4]]] (cartesian-prod all))
;; ([1 3] [1 4] [2 3] [2 4])

reborg 2020-01-29T13:32:11.029800Z

Motivo: non si sa quante coll ci sono in colls. for funziona molto bene se si sa quante colls ci sono. Quindi sto cercando un modo di generare un for attraverso qualche macro expansion. I miei tentativi di usare defmacro non hanno funzionato finā€™ora. Mi piacerebbe capire dove sbaglio.

bronsa 2020-01-29T13:41:06.030100Z

perche` non usare semplicemente ricorsione?

bronsa 2020-01-29T13:41:14.030400Z

(defn cartesian-prod [colls]
  (if-let [[coll & colls] (seq colls)]
    (for [x coll
          xs (cartesian-prod colls)]
      (cons x xs))
    [[]]))

reborg 2020-01-29T13:42:52.030600Z

ah, bella, non ci avevo pensato

reborg 2020-01-29T13:52:14.031200Z

sicuramente meglio!

reborg 2020-01-29T13:54:49.033700Z

Se hai un minuto (e voglia) puoi postare una defmacro che genera un for con bindings variabili? Ho provato varie combinazioni di sintax-quote, gensym e famiglia ma mi blocco sempre. Ho la sensazione che dovrebbe essere relativemente sempliceā€¦ oppure cā€™eā€™ qualcosa che non capisco

bronsa 2020-01-29T13:55:16.034Z

in che senso?

bronsa 2020-01-29T13:55:44.034800Z

(let [all [[1 2] [3 4]]] (cartesian-prod all)) con cartesian-prod una defmacro non e` fattibile

reborg 2020-01-29T13:55:55.035100Z

forse eā€™ concettualmente un problema il fatto che il contenuto di colls eā€™ noto solo a runtime, ma a macro-expansion time non cā€™eā€™ niente da fare

bronsa 2020-01-29T13:56:02.035400Z

precisamente

reborg 2020-01-29T13:56:16.035700Z

ecco, lā€™ho realizzato ora scrivendoloā€¦ che cefalo

reborg 2020-01-29T13:57:12.036200Z

e non eā€™ la prima volta che non me ne rendo conto, spendo 2 ore a non capire percheā€™ la macro non mi riesceā€¦