Использование datomic и clojure Я запрашиваю базу данных и получаю список из девяти элементов.заполнить список один раз
Я хотел бы нарисовать эти девять элементов на странице, и на этом этапе они гарантированно будут разными элементами.
Однако каждый раз, когда я вызываю функцию, она повторяет запрос, возвращает новый список и затем получает элемент из нового списка. Это очень неэффективно, а также вводит возможность дублирования.
Я хотел бы запомнить этот список и его n-й-индексируемый. Предложения и идеи приветствуются.
Спасибо! В итоге я узнал о задержке http://clojuredocs.org/clojure.core/delay через канал #Clojure freenode. Когда кто-то разделяет fxn, он запускает тело один раз и кэширует результат; будущие derefs получат кешированный результат. Использование let over delay (пусть [результаты (delay (query ...))] ___ @result) помогли мне достичь того, что я хотел. Еще раз спасибо за вашу помощь – sova
Задержка полезна, если функция не принимает аргументов. Я не убежден в вашем примере, что вы достигли memoization, потому что новая задержка создается каждый раз, когда вы оцениваете форму let. Обратите внимание, что я добавил ссылку на core.memoize для ответа. –