@ Джас это уже прибил.Добавление моего собственного, чтобы предоставить некоторые комментарии о том, что происходит на промежуточных этапах.
Используйте наборы для проверки членства.Тогда вопрос "это гласный?"будет быстрым.
(def vowels (set "aeiouy"))
vowels
;; => #{\a \e \i \o \u \y}
Мы можем отфильтровать гласные, а затем получить только индексы
(defn vowel-indices-1 [word]
(->> (map vector (range) word) ; ([0 \h] [1 \e] [2 \l] ...)
(filter (fn [[_ character]] ; ([1 \e] [4 \o])
(contains? vowels character)))
(map first))) ; (1 4)
(vowel-indices-1 "hello!")
;; => (1 4)
... или мы можем пойти немного поудобнее с: когдаключевое слово (не знал об этом, спасибо!), в том стиле, который вы начали!
(defn vowel-indices-2 [word]
(for [[i ch] (map vector (range) word)
:when (contains? vowels ch)]
i))
(vowel-indices-2 "hello!")
;; => (1 4)