Моя цель - найти слово, сказать, получить и вернуть "Получить, принести"
Не совсем уверен в своей цели, но это не остановило меняот реализации функции, которая получает все братья и сестры слова.Я не думаю, что вам нужна карта со случайными ключами, или вы?Обратите внимание, что набор реализован в виде хэш-карты, где значения совпадают с ключами (например, #{:a :b}
- это обтекание {:a :a, :b :b}
).
Теперь сначала проанализируйте данные в спискенаборов слов:
(def word-sets
(map (comp set #(map string/trim %))
(csv/read-csv "Fetch, get, bring \n Take, receive, accept")))
;; => (#{"bring" "Fetch" "get"} #{"accept" "Take" "receive"})
Тогда функция, чтобы получить родные слова:
(defn siblings [word]
(mapcat #(when (contains? % word) (disj % word))
word-sets))
Используя оператор набора contains?
, мы проверяем каждый набор слов, если он содержитслово, если так, мы возвращаем этот набор с этим словом disj
oined.Из-за when
набор слов, который не содержит слово, становится nil
, а mapcat
удаляет записи nil
и объединяет остальные в один плоский список.
Например,
(siblings "get")
;; => ("bring" "fetch")
(siblings "Take")
;; => ("accept" "receive")
(siblings "non existing")
;; => '()