Just to expand on this slightly - seq applied to a set must introduce an 
order that is not present in the set. This order in principle comes from 
nowhere in the data. But it does in practice come from some arbitrary 
decisions in the implementation.  Maybe this was andy's point.

On Wednesday, 22 April 2015 13:18:43 UTC+10, Dave Sann wrote:
>
> Agree it's an interesting writeup.
>
> I think that the behaviour of seq should be entirely expected though. Sets 
> have no ordering (logically) so turning them into an ordered sequence 
> should be considered to be an entirely arbitrary operation (unless specific 
> guarantees are provided). The fact that the implementations sometimes 
> maintain an order should not be used or relied upon at all.
>
> a seq of a set is not itself a set and therefore is not subject to the 
> same referential transparency rules as a set.
>
> Dave
>
> On Wednesday, 22 April 2015 12:39:42 UTC+10, Mike Rodriguez wrote:
>>
>> Thanks for sharing this.  I found the write-up to be very informative and 
>> to have good background sources.  
>>
>> I certainly never thought about this sneaky behavior concerning `seq` and 
>> hash sets before now.  I'll have to look out for that one!
>>
>> On Tuesday, April 21, 2015 at 8:13:48 PM UTC-5, Andy Fingerhut wrote:
>>>
>>> I had come across the issue of Clojure hash sets that contain the same 
>>> set of elements returning their elements in different orders from each 
>>> other, depending upon which order they were added to the set (only if they 
>>> have equal values for (hash x)).
>>>
>>> This and other questions on referential transparency on the Clojure 
>>> group got me thinking on my commutes about it some more, and I dug into it 
>>> way more than I expected to, and wrote up an article on it.  If you think 
>>> such a topic would interest you, you can read more about it here:
>>>
>>>     
>>> https://github.com/jafingerhut/thalia/blob/master/doc/other-topics/referential-transparency.md
>>>
>>> Guaranteed at least 99% epiphany free
>>>
>>> Andy
>>>
>>>

-- 
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
--- 
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to