Я пытаюсь создать таблицу (график работы), которую я кодировал ранее, используя python, я думаю, что это было бы хорошим введением для языка Clojure для меня.
У меня очень мало опыта работы с Clojure (или в этом отношении шумиха), и я прошел свои обходы в Google и сделал много проб и ошибок, но, похоже, не могу свыкнуться с этим стилем кодирования.
Вот мои примеры данных (будут поступать из базы данных sqlite в будущем):
(def smpl2 (ref {"Salaried"
[{"John Doe" ["12:00-20:00" nil nil nil "11:00-19:00"]}
{"Mary Jane" [nil "12:00-20:00" nil nil nil "11:00-19:00"]}]
"Shift Manager"
[{"Peter Simpson" ["12:00-20:00" nil nil nil "11:00-19:00"]}
{"Joe Jones" [nil "12:00-20:00" nil nil nil "11:00-19:00"]}]
"Other"
[{"Super Man" ["07:00-16:00" "07:00-16:00" "07:00-16:00"
"07:00-16:00" "07:00-16:00"]}]}))
Сначала я пытался пройти через это, используя для , затем переходя на дозыq и, наконец, domap (что кажется более успешным) и сбрасывая содержимое в html table (моя оригинальная программа на python преобразовала это из базы данных sqlite в электронную таблицу excel с использованием COM).
Вот моя попытка (таблица создания fn):
(defn html-doc [title & body]
(html (doctype "xhtml/transitional")
[:html [:head [:title title]] [:body body]]))
(defn create-table []
[:h1 "Schedule"]
[:hr]
[:table (:style "border: 0; width: 90%")
[:th "Name"][:th "Mon"][:th "Tue"][:th "Wed"]
[:th "Thur"][:th "Fri"][:th "Sat"][:th "Sun"]
[:tr
(domap [ct @smpl2]
[:tr [:td (key ct)]
(domap [cl (val ct)]
(domap [c cl]
[:tr [:td (key c)]]))])
]])
(defroutes tstr
(GET "/" ((html-doc "Sample" create-table)))
(ANY "*" 404))
Это выводит таблицу с разделами (наемные, менеджер и т. Д.) И именами в разделах, я просто чувствую, что злоупотребляю domap, вкладывая его слишком много раз, поскольку мне, вероятно, потребуется добавить больше domaps просто чтобы получить времена сдвига в соответствующих столбцах, и код становится «грязным».
Я заранее прошу прощения, если я не включаю достаточно информации, я обычно не прошу помощи по кодированию, также это мой первый вопрос SO:).
Если вы знаете какие-либо более подходящие способы сделать это или даже советы или хитрости, которые я должен знать как новичок, они определенно приветствуются.
Спасибо.