Я определил несколько функций, используя некоторые переменные, которые обычно вычисляются в большинстве из них. Поэтому я использую ключевые слова-аргументы, которые по умолчанию вычисляют нужные значения.
Пример:
(defun f (a b &key (distance (distance a b))) (c a b distance))
(defun g (a b &key (distance (distance a b))) (if (< distance (r a b))
(f a b :distance distance)))
(defun h (a b &key (distance (distance a b))) (d a b distance))
(defun i (a b &key (distance (distance a b))) (g a b :distance distance)
(h a b :distance distance))
Каждая функция должна иметь возможность вызываться отдельно без указания ключевых слов-аргументов.
Но теперь мне также нужно определить вычисление ключевых слов-аргументов в каждой функции.
Есть ли более элегантный/эффективный способ делать такие вещи? (Я думал о ленивом вычислении и динамическом программировании)