Hi Meikel, Meikel Brandmeyer wrote: > Am 30.05.2010 um 16:39 schrieb Sina K. Heshmati: > >> [2] >> http://github.com/sindoc/algorithms/blob/master/src/test/clojure/whiteboard/y2010/hide-adt-state-using-closure.clj > > I'm almost sure, that this code does not what you expect. Nested def's, and > in > particular defn's, are almost surely wrong. You want: > > (defn make-module > [] > (let [state (atom 0) > say-hello (fn [] (println "Hello")) > public-op (fn [x y] (+ @state x y))] > (fn [op] > (case op > :hello say-hello > :public public-op))))
Could you elaborate a bit please? Is there a reason why nested defns are wrong? > And I'm not sure with what you mean by "you are not allowed to change the > root of > a Var". Of course you can do that. I referred to the fact that we can't do as follows: > (def x 10) > (set! x (* x x)) It should be possible to achieve the exact same effect using some other means but not as a result of evaluating the two expressions above. > (declare x) > (defn fn-using-x ...) > (def x 5) > > The declare is also (more or less) equivalent to (def x nil). (declare symbol) seems to work [3]. I'll later try it with deftypes to see if I can also export datatypes since my method as in [2] failed to export datatypes. Thank you Meikel. Kind regards, SinDoc [3] http://gist.github.com/419568 -- 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
