Какой лучший способ реализовать ключевые слова в качестве необязательных флагов для функции? Я хочу выполнять вызовы функций, например:
(myfunction 5)
(myfunction 6 :do-this)
(myfunction 3 :go-here)
(myfunction 2 :do-this :do-that)
Используя defn, я могу определить такую функцию, как:
(defn myfunction [value & flags] ... )
Но flags
становится списком. Я могу написать свою собственную функцию для поиска в списке, но такая функция не включена в основную библиотеку, поэтому я предполагаю, что она не идиоматична.
Что я сейчас использую:
(defn flag-set? [list flag] (not (empty? (filter #(= flag %) list))))
(defn flag-add [list flag] (cons flag list))
(defn flag-remove [list flag] (filter #(not= flag %) list))