У меня есть несколько вычислений, которые несколько дороги (начиная с базы данных), и я только хочу создать базу данных, если я действительно использую ее. Я ищу ссылочную переменную (или просто переменную, если это возможно), которая будет оценивать ее значение только в том случае, если она используется (или разыменована). Что-то концептуально похоже на следующее.
(def v (lazy-var (fn [] (do (println "REALLY EXPENSIVE FUNCTION") true))))
и в будущем, когда я либо просто использую var v, либо вызываю @v, я затем получаю его для распечатки "ДЕЙСТВИТЕЛЬНО ДОРОГОЙ ФУНКЦИИ", а оттуда v имеет значение true. Важно то, что fn не оценивалось до тех пор, пока переменная не была (de) указана. При необходимости функция оценивается один раз и только один раз для вычисления значения переменной. Возможно ли это в clojure?