Hi all,
I wrote some code to generate some example data for a web ui that I'm
working on and I was wondering if I could get some advice about it to
ensure I'm on the right track in my clojure learning. Basically its a very
simple program that generates a number of JSON files that contain
information, I've modeled the problem as a teacher-student relationship
where each teacher is a file that contains data about a number of students.
The inputs to the main function (gen) takes the number of teachers and the
number of students per teacher and generates sample data that can be
consumed by the web ui. What I'm looking for is:
1. Am I doing things the "clojure way", is my program idiomatic? If not,
advice is appreciated.
2. Specifically the main function in the program (make-student-factory)
I've modeled as a closure and I feel like there is probably a better way to
do it, what are your thoughts on that?
Here is the code:
(ns teachers.core
(:require [clj-json.core :as json]))
(defn- gen-items-json
[students]
(json/generate-string {"timestamp" 5000
"items" students
"identifier" "id"
"label" "id"
"rc" 200
"msg" "Data retrieved successfully."}))
(defn- make-student
[teacherName
studentName
age] {"id" (str teacherName "!" studentName)
"TeacherName" teacherName
"StudentName" studentName
"age" age})
(defn- make-name [prefix n] (str prefix n))
(defn- make-teacher-name [n] (make-name "TEACHER" n))
(defn- make-student-name [n] (make-name "STUDENT" n))
(defn- make-student-factory
"Returns a function allowing you to create a number
of student definitions for the given teacher."
[teacherName]
(fn [n]
(make-student teacherName (make-student-name n) 0)))
(defn- make-students
[teacherName n]
(let [fac (make-student-factory teacherName)]
(map fac (range n))))
(defn- spit-json
[teacherName n]
(println "Creating " n " students for teacher: " teacherName)
(spit (str teacherName ".json")
(gen-items-json (make-students teacherName n))))
(defn gen
[numTeachers numStudents]
(doseq [teacherName (map make-teacher-name (range numTeachers))]
(spit-json teacherName numStudents)))
Thanks for any comments!
Cheers,
Craig
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.