juan_gandhi: (Default)
[personal profile] juan_gandhi
Scala:
  scala> List(Set(1,2)).flatten == List(Set(2,1)).flatten
res3: Boolean = false


Бля.

Date: 2012-07-03 08:02 pm (UTC)
From: [identity profile] sassa-nf.livejournal.com
ну да, но теперь же это самое интересное :)

import qualified Data.IntMap as I
import qualified Data.Set as S
...
insert :: (Hashable a, Ord a) => a -> HashSet a -> HashSet a
insert a (HashSet s) = HashSet $
  I.insertWith (\_ -> S.insert a) (hash a) (S.singleton a) s
по ключу (hash a) нашли существующее значение и скомбинировали его с новым: (S.insert a). Поскольку S.insert==Set.insert, то должно быть отсортировано. quickcheck что, к разным типам привёл два списка?

Date: 2012-07-04 04:54 am (UTC)
From: [identity profile] nponeccop.livejournal.com
> quickcheck что, к разным типам привёл два списка?

Это исключено, т.к. (==) :: Eq a => a -> a -> Bool, а не (Eq a, Eq b) => a -> b -> Bool, т.е. сравнению требуется 2 одинаковых типа.

Вы на toList и fromList посмотрите. Как происходит вставка одного элемента - иррелевантно, т.к. пример её не использует.

Date: 2012-07-04 07:27 am (UTC)
From: [identity profile] sassa-nf.livejournal.com
ну, посмотрю. я думал, дложно было быть consistent с поэлементной вставкой.

Date: 2012-07-04 07:38 am (UTC)
From: [identity profile] nponeccop.livejournal.com
в документации порядок не гарантируется. Соответственно, и консистентность.

Date: 2012-07-04 07:39 am (UTC)
From: [identity profile] sassa-nf.livejournal.com
говорят, используется:

fromList :: (Hashable a, Ord a) => [a] -> HashSet a
fromList xs = foldl' (flip insert) empty xs


да, я понимаю насчёт Eq, но как ещё объяснить разницу. Если бы объекты были одинаковы, то insert выполнился бы одинаково.

Мне доустановить ещё чё-то там надо. А то бы просто глянуть на fromList одного и другого.

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

December 2025

S M T W T F S
  12 3 4 56
7 8910111213
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 9th, 2025 07:48 pm
Powered by Dreamwidth Studios