У меня есть набор значений в Clojure, который я хочу структурировать аналогично записи. Я пытаюсь найти лучший способ обработки набора этих записей.Clojure работает с записями
Так что у меня, например запись:
(defrecord Link [page url])
Что лучше держать структуру данных коллекции этих записей, которые я могу пошагово рекурсивно, при непрерывном обновлении коллекции?
Раньше я делал это по одному значению с использованием последовательности, а затем конкатенировал новые ссылки в конце, когда я обрабатывал их рекурсивно. Но теперь я хочу больше узнать о каждой ссылке.
Редактировать Для ясности
я раньше использовал карты, однако я думаю, что я путая себя, пытаясь использовать вложенную карту с как
#{:rootlink "http://www.google.co.uk" :links nestedmapoflinks}
, который сбивает с толку меня, когда я пытаюсь проклинать его.
Ниже приведен код, который я использовал, ниже - это то, что в настоящее время работает с последовательностью ссылок, но никакой другой информации о ссылке.
(defn get-links
[url]
(map :href (map :attrs (html/select (fetch-url url) [:a])))))
(defn process-links
[links]
(if (not (empty? links))
(do
(if (not (is-working (first links)))
(do
(println (str (first links) " is not working"))
(recur (rest links)))
(do
(println (str (first links) " is working"))
(recur (concat (rest links) (get-links (first links)))))))))
Я думаю, что я должен добавить каждый элемент в карту с
{:rootlink "http://www.google.co.uk" :link "http://someurlontherootlinkpage.com"}
вместо того, чтобы пытаться работать с вложенной картой.
Однако причина, по которой я упоминал записи, потому что я пытался объединить две карты вместе, используя первый способ создания карты. Я все еще немного смущен о лучшей структуре, используемой для рекурсии через карту.
Final Update
Итак, после долгих препирательств я наконец придумал это ниже фрагмент кода, который возвращает SEQ векторов, составленных из:
["root link address" "link"]
["http://www.google.co.uk" "http://www.google.co.uk/examplelink"]
Код:
(defn get-links
[url]
(map #(vector url %)(map :href (map :attrs (html/select (fetch-url url) [:a])))))
Код теперь на моем github доступен в моем профиле.
Я полностью не понял ваш первоначальный вопрос, я удалю свой ответ. –
Я думаю, что ваш ответ был уместным, он действительно добавил важную информацию о работе с различными структурами данных, которые я задавал в первую очередь. – Dale
Хорошо, я восстановил его. Если вы сочтете это полезным, возможно, кто-то другой. Надеюсь, вы получите ответ на свой конкретный вопрос о необходимой структуре данных, потому что сейчас я ничего не могу придумать. –