以前にPythonを使用してコーディングしたテーブル(作業スケジュール)を作成しようとしています。これは、Clojure言語の良い入門書になると思います。
私はClojure(またはその点ではLisp)の経験がほとんどなく、グーグルでラウンドを行い、試行錯誤を繰り返しましたが、このスタイルのコーディングに頭を悩ませているようには見えません。
これが私のサンプルデータです(将来は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"]}]}))
私はこれを最初に使用して、 doseqに移動し、最後にdomap(これはより成功しているようです)と内容をhtmlテーブルにダンプしようとしていました(私の元のPythonプログラムはこれをsqliteデータベースからCOMを使用してExcelスプレッドシートに出力しました)。
これが私の試みです(create-table 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))
これにより、セクション(salaried、managerなど)とセクション内の名前を含むテーブルが出力されます。取得するためだけにさらにdomapを追加する必要があるため、何度もネストしてdomapを悪用しているように感じます。適切な列のシフト時間とコードは、「汚い」感じになっています。
十分な情報が含まれていない場合は、事前にお詫び申し上げます。通常、コーディングについてサポートを求めることはありません。これは、私の最初のSOの質問です:)。
これを行うためのより良いアプローチ、または私が初心者として知っておくべきヒントやコツさえ知っているなら、彼らは間違いなく大歓迎です。
ありがとう。