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] sassa-nf.livejournal.com 2012-07-02 07:34 pm (UTC)(link)
да, прикольно. каноничного порядка в сете нет.

Sorry, could not resist

[identity profile] spamsink.livejournal.com 2012-07-02 07:37 pm (UTC)(link)
И так будет с каждым, кто не пользуется C++ STL.

[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] zhengxi.livejournal.com 2012-07-02 07:38 pm (UTC)(link)
scala> Set(1,2).toString == Set(2,1).toString
res11: Boolean = false

scala> Set(1,2).toList == Set(2,1).toList
res12: Boolean = false

[identity profile] lomeo.livejournal.com 2012-07-02 07:39 pm (UTC)(link)
Зависит от Set:

import scala.collection.immutable._

scala> List(HashSet(1, 2)).flatten == List(HashSet(2,1)).flatten
res0: Boolean = true

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

[identity profile] sassa-nf.livejournal.com 2012-07-02 07:46 pm (UTC)(link)
ну в HashSet есть каноничный порядок

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

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

Re: ага

[identity profile] ivan-gandhi.livejournal.com 2012-07-02 07:49 pm (UTC)(link)
Да, вот именно.
Проблема.

[identity profile] ralitza.livejournal.com 2012-07-02 07:50 pm (UTC)(link)
для меня первые строки - медитация

последнее слово - сигнал к ее окончанию.

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

[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] cema.livejournal.com 2012-07-02 08:03 pm (UTC)(link)
Плохая, негодная Scala!

[identity profile] ivan-gandhi.livejournal.com 2012-07-02 08:18 pm (UTC)(link)
Вот правильный сет! Спасибо за идейку!

[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] akalenuk.livejournal.com 2012-07-02 08:35 pm (UTC)(link)
Хм. Вот не знаю скалы, но кажется правильней было бы как-то так:
List(Set(1,2), order_fun)

Просто так привести множество в список нельзя же. Нужен антирефлексивный порядок, а откуда его взять?

Кстати. "List(Set(1,2,2)).flatten == List(Set(2,1,1)).flatten" ?

[identity profile] ivan-gandhi.livejournal.com 2012-07-02 08:42 pm (UTC)(link)
false

[identity profile] huzhepidarasa.livejournal.com 2012-07-02 09:02 pm (UTC)(link)
Это, боюсь, пока на коллизию не напоролись.

scala> (563,983).hashCode
res1: Int = 8056365
scala> (961,751).hashCode
res2: Int = 8056365
scala> List(HashSet((563,983),(961,751))).flatten == List(HashSet((961,751),(563,983))).flatten
res3: Boolean = false

[identity profile] ivan-gandhi.livejournal.com 2012-07-02 09:29 pm (UTC)(link)
А блин...

Спасибо за пример.

[identity profile] dvig-al.livejournal.com 2012-07-03 03:23 am (UTC)(link)
блин, читая переписку в рассылке, очень напомнило http://www.scala-lang.org/node/9021.
Edited 2012-07-03 03:24 (UTC)

[identity profile] ivan-gandhi.livejournal.com 2012-07-03 03:27 am (UTC)(link)
О как роскошно. Сидел ржал.

[identity profile] dvig-al.livejournal.com 2012-07-03 03:45 am (UTC)(link)
Ну, позже баг пофиксили конечно, но тож скрежет был :)

Page 1 of 3