On Wed, Apr 22, 2009 at 1:28 PM, David Nolen <dnolen.li...@gmail.com> wrote: > You're missing the clever hack ;) I'm hashing the private data structure and > associating it to the map. This is what is used in the equality test. You > can verify yourself that it works. > my-object ;; -> {:private -1261861093} > my-other-object ;; -> {:private -1261861093} > Make sense? A few quick tests show that the hash of a data structure will > match on any VM.
OK, I see the clever hack now. This could work, until murphy's law kicks in and you get a false positive when two different sets of private data produce the same hash... (or someone boinks the hash value in the map). Cheers, Victor. > On Wed, Apr 22, 2009 at 1:01 PM, Victor Rodriguez <vict...@gmail.com> wrote: >> >> On Tue, Apr 21, 2009 at 12:01 PM, David Nolen <dnolen.li...@gmail.com> >> wrote: >> > Nice post thanks for putting it together. My gut feeling is that the >> > need >> > for information hiding is still overinflated, but... until someone >> > builds a >> > 200k LOC Clojure program who will know for sure? >> > Here's my shot at a solution for private data: >> > (defn set-private [m k x] >> > (let [the-meta (meta m) >> > new-private (assoc (:private the-meta) k x)] >> > (with-meta >> > (assoc m :private (hash new-private)) >> > (assoc the-meta :private new-private)))) >> > (defn get-private [m k] >> > (get (:private (meta m)) k)) >> > (def my-object (set-private {} :first "Bob")) >> > (def my-other-object (set-private {} :first "Bob")) >> > (get-private my-object :first) ; -> "Bob" >> > (= my-object my-other-object) ; -> true >> > No secret keys, no other libraries, and I believe this supports equality >> > just fine. Since we're using metadata the data travels around easily >> >> This won't work, since metadata is not used for equality tests, isn't >> that right? >> >> Regards, >> >> Victor Rodriguez. >> >> > between operations. >> > ---------- Forwarded message ---------- >> > From: Mark Engelberg <mark.engelb...@gmail.com> >> > Date: Tue, Apr 21, 2009 at 6:41 AM >> > Subject: Re: Abstract data types in functional languages >> > To: clojure@googlegroups.com >> > >> > >> > >> > On Mon, Apr 20, 2009 at 11:00 AM, Timo Mihaljov <noid....@gmail.com> >> > wrote: >> >> Is the concept of Abstract Data Types [1] useful in Clojure? >> >> >> >> If yes, how would you implement one? >> > >> > I have composed a lengthy response to this question, and added it to my >> > blog: >> > http://programming-puzzler.blogspot.com/2009/04/adts-in-clojure.html >> > >> > I look forward to everyone's comments, >> > >> > Mark >> > >> > >> > >> > >> > > >> > >> >> > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---