juan_gandhi: (Default)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2012-07-02 12:24 pm
Entry tags:

наука и жизнь

Scala:
  scala> List(Set(1,2)).flatten == List(Set(2,1)).flatten
res3: Boolean = false


Бля.

[identity profile] lomeo.livejournal.com 2012-07-02 07:38 pm (UTC)(link)
См. реализацию вот этого класса и всё станет ясно:
https://github.com/scala/scala/blob/v2.9.2/src/library/scala/collection/immutable/Set.scala#L92

[identity profile] migmit.livejournal.com 2012-07-02 07:41 pm (UTC)(link)
Никакая реализация не оправдывает косяк интерфейса.

[identity profile] sassa-nf.livejournal.com 2012-07-02 07:48 pm (UTC)(link)
а чё интерфейса?

обязан ли set перебирать одинаковые элементы в одинаковом порядке?

[identity profile] glocka.livejournal.com 2012-07-02 07:53 pm (UTC)(link)
Не обязан, в общем случае сравнение элементов вообще может быть не определено.

[identity profile] ivan-gandhi.livejournal.com 2012-07-02 07:54 pm (UTC)(link)
Перебирать не обязан, но equational axiom должна бы поддерживаться для "нормальных" случаев.

[identity profile] migmit.livejournal.com 2012-07-02 07:59 pm (UTC)(link)
Множества {1,2} и {2,1} совпадают. Аксиома экстенсиональности.

[identity profile] huzhepidarasa.livejournal.com 2012-07-02 08:28 pm (UTC)(link)
Кто-нибудь гарантирует, что List(Set(1,2))==List(Set(1,2)) (говоря по-простому, referential transparency)?

[identity profile] lomeo.livejournal.com 2012-07-02 08:28 pm (UTC)(link)
Множества-то как раз равны:

scala> Set(1,2) == Set(2,1)
res0: Boolean = true

Хотя принципиально, конечно, согласен.

[identity profile] ivan-gandhi.livejournal.com 2012-07-02 07:53 pm (UTC)(link)
Реализация - это или следствие не вполне адекватного понимания, или признание грустной (гнусной) реальности.