Size: a a a

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

2021 October 29

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
даже с мемоизацией для (fn [x] (Math/cos (Math/sin x))) мемоизированный вариант в два раза медленнее
источник

PL

Pavel Lygin in Clojure — русскоговорящее сообщество
спасибо большое всем ответившим в чате🥳🥳🥳, второй раз уже помогаете в изучении языка☺️
источник

PL

Pavel Lygin in Clojure — русскоговорящее сообщество
но так функция стала дороже по времени чем мемоизация
(do (Thread/sleep 100) (Math/sin x))
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
тогда уже так
(defn calculate-area [function x]
 (let [f (memoize (partial function))]
   (*
     step
     (/
       (+
         (f x)
         (+ (f x) (f step)))
       2)
     )
   )
 )
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
я вообще не понимаю, при чём тут Thread/sleep 😊
источник

PL

Pavel Lygin in Clojure — русскоговорящее сообщество
понял! точно!! это же то, что нужно мемоизация функции по значению числа, без попадания в аргументы анонимной функции
источник

PL

Pavel Lygin in Clojure — русскоговорящее сообщество
увеличивает время выполнения функции на какое-то количество миллисекунд.
И тогда накладные расходы на мемоизацию окажутся дешевле по времени выполнения самой функции
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
а ещё лучше так
(defn integral
 ([function x]
  (let [modifier (if (< x 0) -1 1)]
    (integral function (* x modifier) modifier)))
 ([function x modifier]
  (let [f (memoize function)]
    (loop [i 0
           acc 0]
      (if (< i x)
        (recur (+ i step) (+ acc (calculate-area f i)))
        (* acc modifier)
        )
      ))
  )
 )
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
но в условиях задачи вроде ничего нет про то, чтобы специально замедлить алгоритм для демонстрации профита от мемоизации 😊
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
если коротко: малые вычисления быстрее, чем цикл "проверил кэш, вычислил, положил"
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
кешируют в основном вызовы в сеть, а натягивать кеш на факториал это слабый пример
источник

PL

Pavel Lygin in Clojure — русскоговорящее сообщество
восторг🥳! Спасибо!
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
не забудь убрать мемоизацию из calculate-area
источник

PL

Pavel Lygin in Clojure — русскоговорящее сообщество
понимаю, поэтому и добавил задержку, но как бы там ни было, меня лабораторные на кложе сильно бустят, заметил за этот месяц, что код на джаве в проде начинаю иначе писать и это радует.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Для коллекции
  (def f1 (fn [x] (Math/cos (Math/sin x))))
 (f1 100)
 ;;Execution time mean : 46,949454 ns
 
 (def f2 (memoize (fn [x] (Math/cos (Math/sin x)))))
 (f2 100)
 ;;Execution time mean : 229,854022 ns
 
 ;; Function memoized using Caffeine
 (def f3 (memoize/memoize (fn [x] (Math/cos (Math/sin x))) first ""))
 (f3 100)
 ;;Execution time mean : 83,739631 ns
источник

SP

Stas P in Clojure — русскоговорящее сообщество
коллеги, а вопрос такой есть вот такая штука для запуска етстов: (clojure.test/test-ns 'test-integration-invoice.draft.invoice)
источник

SP

Stas P in Clojure — русскоговорящее сообщество
а вот как в нее параметром передать нс НЕ находясь в репле в нем а как то абсолютным значением?
источник

SP

Stas P in Clojure — русскоговорящее сообщество
ну там через слешы или еще как. как это вообще работает?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
примеры тут не помогают?
https://clojuredocs.org/clojure.test/test-ns
источник

SP

Stas P in Clojure — русскоговорящее сообщество
это я видел но нифига не понял этой магии
источник