У меня есть список, который может содержать элементы, которые будут сравниваться как равные. Мне нужен подобный список, но с удалением одного элемента. Поэтому из (: a: b: c: b: d) Я хотел бы иметь возможность "удалить" только один: b, чтобы получить (: a: c: b: d).
Контекст - это рука в карточной игре, в которой играют две колоды стандартных карт, поэтому могут быть дубликаты карт, но все равно воспроизводятся по одному.
У меня есть рабочий код, см. ниже. Есть ли более идиоматические способы сделать это в Clojure?
(defn remove-one [c left right]
(if (= right ())
left
(if (= c (first right))
(concat (reverse left) (rest right))
(remove-one c (cons (first right) left) (rest right)))))
(defn remove-card [c cards]
(remove-one c () cards))
Вот ответы Scala, которые я получил некоторое время назад: Что такое идиоматический способ Scala to "remove" один элемент из неизменяемого списка?