On Apr 9, 2:55 pm, Chas Emerick <cemer...@snowtide.com> wrote:
> I recently came across a situation where I very much wanted to delay
> the calculation of some values, but where I also wanted those delays
> to use their calculated values for equality determinations. This is
> particularly important when comparing vectors or maps that contain
> delayed values, where doing something like (= (force some-delay) some-
> value) isn't possible.
>
> So, I whipped up a tdelay (transparent delay) macro, an almost
> complete ripoff of clojure.core/delay, except that it creates
> instances of a subclass of clojure.lang.Delay that defers equality and
> hashcode calculations to the delay's value. The results:
>
> user=> (= {:a 5 :b (delay 12)} {:a 5 :b 12})
> false
> user=> (= {:a 5 :b (tdelay 12)} {:a 5 :b 12})
> true
>
> I get nervous when I screw around with equality in relatively sneaky
> ways like this, so I thought I'd toss this out on the list and see if
> anyone has any comments one way or the other.
>
You shouldn't ignore your nervousness in this case:
user=> (= {:a 5 :b 12} {:a 5 :b (tdelay 12)})
false
The lack of symmetry makes this too fragile IMO.
Rich
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---