This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2021-07-19
Channels
- # announcements (1)
- # babashka (26)
- # beginners (42)
- # calva (3)
- # cider (5)
- # cljs-dev (7)
- # cljsjs (1)
- # cljsrn (13)
- # clojure (95)
- # clojure-europe (12)
- # clojure-germany (3)
- # clojure-italy (12)
- # clojure-nl (1)
- # clojure-spec (16)
- # clojure-uk (25)
- # clojurescript (13)
- # clojureverse-ops (5)
- # community-development (1)
- # conjure (8)
- # cryogen (3)
- # datomic (5)
- # deps-new (7)
- # exercism (1)
- # fulcro (34)
- # honeysql (9)
- # hyperfiddle (3)
- # instaparse (2)
- # introduce-yourself (2)
- # jobs (6)
- # kaocha (1)
- # lambdaisland (1)
- # lsp (47)
- # malli (3)
- # membrane (38)
- # off-topic (9)
- # polylith (36)
- # reitit (7)
- # releases (1)
- # remote-jobs (2)
- # shadow-cljs (11)
- # spacemacs (7)
- # sql (7)
- # tools-deps (19)
Ciao signori, domanda veloce, perché rand-nth su un vector di qualche migliaio di elementi mi va lentissimo? I vector non dovrebbero avere accesso immediato via index? Può essere che la sequenza non sia ancora tutta realizzata ed è per questo che è lento?
Teoricamente dovrebbe essere O(log32N)
via index come dici tu, quindi non dovrebbe dipendere da un uso corretto di rand-nth
. Puoi postare codice?
(let [chain (build-markov (load-data/generate-text-list text))
first-keys (load-data/generate-first-keys text)
sentences (apply concat (map #(sentence-by-key % chain '() true) first-keys))
result (->> (vec (reduce (fn [result value]
(if (not= "java.lang.String" (type (first value)))
(conj result (flatten value))
(conj result value)))
[]
sentences))
(remove #(= '("") %))
(pmap #(clojure.string/join " " %)))]
result)
la lista finale ha 8198516
elementi non qualche migliaio come ho detto prima lol
con pochi elementi rand-nth
ritorna subito per questo mi chiedevo perche’ con molti elementi ci mette cosi tanto 😕
Dunque, il risultato di un pmap e’ una lazyseq, quindi no vector. Poi occhio che (not= "java.lang.String" (type (first value))
e’ sempre vero
ah giusto!
ho appena fatto la prima dose di vaccino non sono tutto apposto 😄
Questo mi sembra a naso equivalente come logica, ma ritorna un vector:
(let [chain (build-markov (load-data/generate-text-list text))
first-keys (load-data/generate-first-keys text)
sentences (mapcat #(sentence-by-key % chain '() true) first-keys)]
(transduce
(comp
(remove #(= '("") %))
(map #(clojure.string/join " " %)))
(fn ([a b] ((if (coll? b) into conj) a b))
([] [])
([a] a)) sentences))
e pure in parallelo grazie al transduce giusto?