我正在尝试创建一个表格(工作时间表),之前我已经使用Python编码了它,我认为这将是我学习Clojure语言的很好入门。
我对Clojure(或lisp)几乎没有任何经验,我在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"]}]}))
我原本尝试使用for,然后转向使用doseq,最终采用了更成功的domap方法,并将内容转储到HTML表格中(我的原始Python程序通过COM从SQLite数据库输出到Excel电子表格中)。
以下是我的尝试(create-table函数):
(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,可能需要添加更多的domap才能将班次时间放在正确的列中,代码感觉变得“dirty”。如果您知道更好的方法来完成这个任务,或者作为新手应该知道的技巧和提示,那么请一定告诉我。谢谢。