Hello everyone 👋 I made this function to generate maps with a given depth and width:
(s/def ::any (s/or :s string? :i int?))
(defn map-gen [x y]
(->> (repeatedly x #(-> keyword?
s/gen
g/generate))
(map (fn [k] [k (if (pos? y)
(map-gen x (dec y))
(-> ::any
s/gen
g/generate))]))
(into {})))
but for some reason it is very slow, what am I misusing here?Your recursion is generating an exponentially increasing large map, so the time is also going to go up. For example:
(map-gen 10 y) where y is 1 to 5 goes up in time:
y=1 "Elapsed time: 14.155375 msecs"
y=2 "Elapsed time: 50.327042 msecs"
y=3 "Elapsed time: 748.101916 msecs"
y=4 "Elapsed time: 2843.250333 msecs"
y=5 "Elapsed time: 28140.05775 msecs"So, it would be helpful if you specify how big are the maps you're generating, what kind of time you're seeing, and what kind of time you'd expect (since "slow" and "fast" are relative).