Size: a a a

Clojure — русскоговорящее сообщество

2021 March 13

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Sergey Trofimov
  (do (time (->> [\*]
                (iterate #(conj % \*))
                (take 10000)
                (map #(string/join \space %))
                (string/join \newline)
                identity))
     nil) #_"4202.977 msecs"

 (do (time (->> (range)
                (map #(repeat % "*"))
                (map #(clojure.string/join " " %))
                (take 10001)
                (clojure.string/join "\n")
                identity))
     nil) #_"3424.3458 msecs"
 
 (do (time (->> (range 1 10001)
                (map #(repeat % \*))
                (map #(string/join \space %))
                (string/join \newline)
                identity))
     nil) #_"3851.0738 msecs"

 (do (time (->> (repeat 10000 \*)
                (reductions conj [])
                (map #(string/join \space %))
                (string/join \newline)
                (identity)))
     nil) #_"3831.1308 msecs"

 (do (time (->> (iterate (partial str "* ") "* ")
                (transduce (comp (take 10000) (map identity))
                           (constantly nil))))
     nil) #_"34.8619 msecs"

 (do (time (->> (iterate (partial str "* ") "* ")
                (eduction (take 10000))
                (run! identity)))
     nil) #_"39.1781 msecs"

 (do (time (->> (iterate (partial str "* ") "* ")
                (take 10000)
                (run! identity)))
     nil) #_"41.9111 msecs"
А так?
(->> "*"
    (iterate #(do (println %) (str % " *")))
    (take 10000))
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
А так?
(->> "*"
    (iterate #(do (println %) (str % " *")))
    (take 10000))
что так? замерить надо?
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Sergey Trofimov
что так? замерить надо?
Ну да. Чтобы с твоими другими замерами сравнимо было. У меняж железо другое
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
А так?
(->> "*"
    (iterate #(do (println %) (str % " *")))
    (take 10000))
У этого решения, кстати, нет trailing space :)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
А так?
(->> "*"
    (iterate #(do (println %) (str % " *")))
    (take 10000))
это ленивый вариант, он так не замеряется
надо что-то с take сделать
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Sergey Trofimov
это ленивый вариант, он так не замеряется
надо что-то с take сделать
doall
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
А не, doall же он вернет результат тейка
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
У этого решения, кстати, нет trailing space :)
странно, не печатает последний элемент
(->> "*"
      (iterate #(do (println %) (str % " *")))
      (take 6)
      (doall))
*
* *
* * *
* * * *
* * * * *
=> ("*" "* *" "* * *" "* * * *" "* * * * *" "* * * * * *")
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
(transduce
(take 1000)
(constantly nil)
(iterate #(do (println %) (str % " *")) "*"))
Вот так тогда
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Sergey Trofimov
странно, не печатает последний элемент
(->> "*"
      (iterate #(do (println %) (str % " *")))
      (take 6)
      (doall))
*
* *
* * *
* * * *
* * * * *
=> ("*" "* *" "* * *" "* * * *" "* * * * *" "* * * * * *")
хммм
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
А, ну оно логично
Принтлн же до него)
Ну тогда take на 1 больше просто делат
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
А так?
(->> "*"
    (iterate #(do (println %) (str % " *")))
    (take 10000))
  (->> "*"
      (iterate #(do (identity %) (str % " *")))
      (take 6)
      (doall)) #_"1,744810 µs"

 (do (time (->> "*"
                (iterate #(do (identity %) (str % " *")))
                (take 10001)
                (doall))) #_"117.8056 msecs"
     nil)
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
чет странно, ожидал быстрее результат
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Ща у себя прогоню
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
чет странно, ожидал быстрее результат
короткий вариант как мой первый
а длинный мучается с выделением всей последовательности в память (что тут нафиг не нужно)
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Sergey Trofimov
короткий вариант как мой первый
а длинный мучается с выделением всей последовательности в память (что тут нафиг не нужно)
Да, я с трансдьюсером варик кинул, но ща я уже сам замерю чтобы тебя не дергать
источник

А(

Артур (MIIIG) in Clojure — русскоговорящее сообщество
На руби был красивый код)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
чет странно, ожидал быстрее результат
заменим doall на count, и уже более менее
(do (time (->> "*"
                (iterate #(do (identity %) (str % " *")))
                (take 10001)
                (count))) #_"117.8056 msecs"
     nil)
"Elapsed time: 53.7477 msecs"

я потому и спрашивал, как будет реализовывать ленивость
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Sergey Trofimov
заменим doall на count, и уже более менее
(do (time (->> "*"
                (iterate #(do (identity %) (str % " *")))
                (take 10001)
                (count))) #_"117.8056 msecs"
     nil)
"Elapsed time: 53.7477 msecs"

я потому и спрашивал, как будет реализовывать ленивость
Всё равно есть варианты быстрее, но не понимаю почему они быстрее
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
Всё равно есть варианты быстрее, но не понимаю почему они быстрее
задай вопрос конкретнее 😊
источник