Если существует ключ: update, в противном случае: assoc рассмотрим это внутри цикла сокращения: (if (contains? m k) (update m k conj v) (assoc m k [v])) Есть ли способ избавиться от оператора if? Ответ 1 Используйте fnil для обработки значения nil v, если k не существует на карте: (update m k (fnil conj []) v) Ответ 2 В то время как ответ fnil более впечатляющий, мне легче читать следующее, особенно если вы не знакомы с fnil: (assoc m k (conj (m k []) v)) где (m k []) возвращает значение k в m или по умолчанию - [], если k не существует в m. Если k является символом, также будет работать (k m []).
Ответ 1 Используйте fnil для обработки значения nil v, если k не существует на карте: (update m k (fnil conj []) v)
Ответ 2 В то время как ответ fnil более впечатляющий, мне легче читать следующее, особенно если вы не знакомы с fnil: (assoc m k (conj (m k []) v)) где (m k []) возвращает значение k в m или по умолчанию - [], если k не существует в m. Если k является символом, также будет работать (k m []).