> * Is "function overloading" the idiomatic way to implement default
> params in clojure?

Typically, I think so. You could also use multimethods, but that might  
be unnecessary flexibility.

Another approach is to emulate keyword arguments:

(defn foo [x y & args]
   (let [{:keys [baz bar]} (apply hash-map args)]
     ...))

(foo 5 6 :baz 9 :bar noo)


> * I'm using an atom to store the database. Could I use a var instead?

I probably wouldn't. You could use a ref.

> * Can the body of the db-push function be simplified?


I think so. Untested:


(defn db-push
  ([key val] (db-push key val *default-db*))
  ([key val db]
     (swap! db assoc key (cons val (db key))))))


If it's a ref, the analogue would be


(defn db-push
  ([key val] (db-push key val *default-db*))
  ([key val db]
     (dosync
       (alter db assoc key (cons val (db key))))))

or document that db-push must be called within a transaction, and  
remove the dosync. (This allows multiple pushes within a single  
transaction.)

-R

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to