Если вы просто хотите расширить текущую функцию, вы можете использовать map-indexed
, что даст вам этот список ([0 0] [1 0] [2 1] [3 0] [4 0])
, который вы можете затем отфильтровать, чтобы сохранить только векторы, которые имеют 1
во второй позиции. Это вернет индекс нечетного символа.
(defn odd-one-out [y]
(->> y
(map #(rem % 2))
(map-indexed vector)
(filter #(= 1 (second %)))
(map first)))
(odd-one-out [2 8 9 200 56])
(2)
Еще лучше было бы использовать функцию odd?
из стандартной библиотеки Clojure.
(->> [2 8 9 200 56]
(map odd?)
(map-indexed vector)
(filter #(second %))
(map first))
Другая версия, использующая keep
.
(чтобы вернуть индекс)
(->> [2 8 9 200 56]
(map-indexed vector)
(keep #(when (odd? (second %))
(first %))))
(2)
(чтобы вернуть значение)
(->> [2 8 9 200 56]
(map-indexed vector)
(keep #(when (odd? (second %))
(second %))))
(9)