Juan-Carlos Gandhi (
juan_gandhi) wrote2012-07-02 12:24 pm
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Entry tags:
наука и жизнь
Scala:
Бля.
scala> List(Set(1,2)).flatten == List(Set(2,1)).flatten res3: Boolean = false
Бля.
no subject
no subject
import scala.collection.immutable._
scala> List(HashSet(1, 2)).flatten == List(HashSet(2,1)).flatten
res0: Boolean = true
no subject
no subject
no subject
Спасибо за пример.
no subject
no subject
Sorry, could not resist
no subject
no subject
no subject
Вот как правильно надо было, с самого начала.
no subject
no subject
no subject
It is reported to be haunted.
no subject
no subject
no subject
https://github.com/scala/scala/blob/v2.9.2/src/library/scala/collection/immutable/Set.scala#L92
no subject
no subject
обязан ли set перебирать одинаковые элементы в одинаковом порядке?
no subject
no subject
no subject
no subject
no subject
scala> Set(1,2) == Set(2,1)
res0: Boolean = true
Хотя принципиально, конечно, согласен.
no subject
ага
res11: Boolean = false
scala> Set(1,2).toList == Set(2,1).toList
res12: Boolean = false
Re: ага
Проблема.
no subject
последнее слово - сигнал к ее окончанию.
no subject
no subject
List(Set(1,2), order_fun)
Просто так привести множество в список нельзя же. Нужен антирефлексивный порядок, а откуда его взять?
Кстати. "List(Set(1,2,2)).flatten == List(Set(2,1,1)).flatten" ?
no subject
false
no subject
no subject
no subject
no subject
И ведь ни один э... хороший человек не посоветовал написать x.compare(y)
no subject
no subject
no subject
no subject
хехе
no subject
no subject
http://ivan-gandhi.livejournal.com/2019207.html?thread=24711559#t24711559 - такой пример не существует? разве только по умолчанию в хаскеле это SortedSet.
no subject
no subject
two100 points?А можно одновременно выдать значение хэша, используемого этими сетами? И можно найти две значения, которые дают одинаковый хэш, а потом попытаться создать сеты из этих значений?
no subject
http://hackage.haskell.org/packages/archive/hashmap/1.0.0.2/doc/html/Data-HashSet.html
no subject
no subject
no subject
занятная конструкция IntMap, нужно ещё почитать.
no subject
no subject
hash 4 == hash 4 + 2 ^ 39
Но для Data.Set (который требует порядка) всё как положено.
no subject
chem Data.HashSet luchshe chem Data.Set?
v kakih takih cluchajah pol'zujut? nabor funcij vrode odin i tot zhe
===========================
P.S.
ksta, otkompilit' vash primer ne daet:
i vot, v ghci:
*Main> :r
[1 of 1] Compiling Main ( sets1.hs, interpreted )
sets1.hs:54:15:
Ambiguous type variable `a0' in the constraints:
(Data.Hashable.Hashable a0) arising from a use of `H.fromList'
at sets1.hs:54:15-24
(Num a0) arising from the literal `4' at sets1.hs:54:39
(Eq a0) arising from a use of `H.fromList' at sets1.hs:54:15-24
Probable fix: add a type signature that fixes these type variable(s)
In the second argument of `($)', namely
`H.fromList [4 + 2 ^ 39, 4]'
In the second argument of `(==)', namely
`(H.toList $ H.fromList [4 + 2 ^ 39, 4])'
In the expression:
(H.toList $ H.fromList [4, 4 + 2 ^ 39])
==
(H.toList $ H.fromList [4 + 2 ^ 39, 4])
Failed, modules loaded: none.
===================================
P.P.S.
a vot esli tak, to compilitsa, no rezul'tat : true
no subject
В GHCi действуют другие правила для тайпчекера, поэтому если я набираю в промпте
toList (fromList [4, 4 + 2 ^ 39]) == toList (fromList [4 + 2 ^ 39, 4])
- оно работает, а при переносе в исходник требуется указать, какие именно целые числа имеются ввиду. Например, так
zz = S.toList (S.fromList [4::Integer, 4 + 2 ^ 39]) == S.toList (S.fromList [4 + 2 ^ 39, 4])
no subject
Конечно будет true, т.к. 4::Int + 2 ^ 39 == 4 на архитектурах с 32-битными интами:
Prelude> [4 + 2 ^ 39, 4::Int]
[4,4]
Prelude> [4 + 2 ^ 39, 4::Integer]
[549755813892,4]
no subject
a zachem ispol'zovat' Data.HashSet
v chem bonus?
no subject
Я не знаю, я не использую.
Реализации и интерфейсы существенно различные.
HashSet требует от элементов реализации Hashable.
Set требует реализации Ord.
Думаю, что проще в реализации и быстрее исполняется в конкретном случае - то и надо использовать.
no subject
>> Я не знаю, я не использую.
hurraaa!!! a to ja dumal, chto ja odin takoj :)
spasibo za raz'jasnenija
no subject
Set имеет логарифмическую (от размера сета) стоимость для insert / delete / lookup. HashSet амортизирует эту стоимость за счёт O(1) операции хеширования (дальше логарифмическая стоимость поиска по меньшему субсету).
no subject
no subject
ну, тогда вычислить хеш один раз и сравнивать хеши просто, а сравнивать сложный объект каждый раз - не просто.
no subject
А можно разложить по полочкам, почему пример с HashSet выдал False? Я сегодня с утра когда глядел, мне показалось, что весь сет бьётся на субсеты с помощью хеша, а субсет-то всё равно Set. Т.е. значения с одинаковым хешем всё равно должны оказаться упорядоченными в каждом субсете. Вот и не понятно, в чём прикол тогда.
no subject
no subject
по ключу (hash a) нашли существующее значение и скомбинировали его с новым: (S.insert a). Поскольку S.insert==Set.insert, то должно быть отсортировано. quickcheck что, к разным типам привёл два списка?
no subject
Это исключено, т.к. (==) :: Eq a => a -> a -> Bool, а не (Eq a, Eq b) => a -> b -> Bool, т.е. сравнению требуется 2 одинаковых типа.
Вы на toList и fromList посмотрите. Как происходит вставка одного элемента - иррелевантно, т.к. пример её не использует.
no subject
no subject
no subject
fromList :: (Hashable a, Ord a) => [a] -> HashSet a
fromList xs = foldl' (flip insert) empty xs
да, я понимаю насчёт Eq, но как ещё объяснить разницу. Если бы объекты были одинаковы, то insert выполнился бы одинаково.
Мне доустановить ещё чё-то там надо. А то бы просто глянуть на fromList одного и другого.
no subject
no subject
Пиши камплейнрепорть баг. :) Ведь баг же?no subject
no subject
ni razu
vidimo nado prodolzhit'...
fp : "odin i tot zhe argument - odin i tot zhe rezultat"
vyshe pokazano ravenstvo listov, nu dlya chistoty :
point v tom, chto scala - javno ne "tort"
no subject
no subject
>> Prelude Data.Set> s12 == s22
>> True
>> Prelude Data.Set> Data.Set.toList s12 == Data.Set.toList s22
>> True
or am i wrong? btw - i don't have any degree, sorry agn
no subject
you say, that i took two concrete sets and proclaim that ALL sets will be with same behavour. and that IT is not true: kvantor vseobwnosti nuzhen
i give up.
no subject
no subject
no subject
a to ja uzh hotel u uvazhaemogo sassa_nf sprosit' skol'ko i kakih testov nuznho progonjat', chtob ne sil'no volnovat'sja za rezul'tat
a tut i ego komment kak raz k stati. spasibo i emu - za nauku :)