Alexander
там в unsafe есть, и где-то в extras хэлперы
Misha
unsafe непедагогично
Alexander
это не очень безопасно и один небольшой unsafe кусок будет
Alexander
если тебе нужен большой и главное мутабельный стейт, то этот путь норм
Alexander
дальше
Misha
а, понял, то есть внутри узла заставлять их общаться, пересылая ссылку, без сериализации?
Alexander
есть совсем грязный вариант
Alexander
угу
Alexander
это если аккуратный вариант медленно или не работает (мутабельность)
Misha
ясно
Alexander
и самый грязный: foo :: MVar MonoType {-# NOINLINE foo #-} foo = unsafePerformIO $ newMVar ""
Alexander
но так лучше не делать :)
Alexander
если только совсем уж приспичит
Misha
я думаю, пойду по варианту 1 :)
Alexander
угу
Alexander
самый логичный, перейти в другие всегда успеешь
Misha
а есть какие-то паттерны насчет того, чтобы держать на узле пул процессов?
Misha
один воркер со стейтом немасштабируется
Misha
то есть в реальности я не буду один процесс держать на узле для обновления стейта
Alexander
в платформе вроде есть
Alexander
но я бы сам написал
Misha
в принципе должно быть несложно, но очень легко налететь на какой-нибудь bottleneck
Misha
понятно, что просто round robin какой-нибудь и все
Alexander
ну я не очень знаю задачу
Alexander
так что сказать не могу
Alexander
если что work-stealing делается просто
Alexander
вроде у WT в блоге было
Alexander
http://www.well-typed.com/blog/74/
Alexander
если не ошибаюсь
Misha
о, круто, спасибо
Misha
я попробую чего-нибудь набросать, наверняка вылезет что-нибудь неожиданное
Misha
спасибо
Alexander
к. если что пиши
Misha
ага
Алдар
Привет, что то туплю, посчитал бесконечный список чисел Фибоначчи, Prelude Control.Applicative> fib = 1:1:(map (\(x,y) -> x + y) $ zip fib (tail fib)) Prelude Control.Applicative> take 10 fib [1,1,2,3,5,8,13,21,34,55]
Алдар
а теперь надо посчитать последовательность вида a[k] = a[k-1] + a[k-2] - 2a[k-3]
Алдар
seq2 = 1:2:3:(map (\(n1,n2,n3) -> n2 + n3 - 2 * n1) $ zip3 seq1 (tail seq1) (tail $ tail seq1))
Алдар
take 10 seq1 [1,2,3,1,1,-2,0,-3,2,-3]
Алдар
четвертый элемент должен быть ( 3 + 2 - 2*1) = 3
Алдар
но почему то 1
Алдар
то есть получается у меня три списка [1,2,3] [2,3] [3] я их зипую получается [(1,2,3)], потом после map должно получится [3]
Алдар
Prelude Control.Applicative> list = [1,2,3] Prelude Control.Applicative> tail list [2,3] Prelude Control.Applicative> tail $ tail list [3] Prelude Control.Applicative> zip3 list (tail list) (tail $ tail list) [(1,2,3)]
Алдар
Prelude Control.Applicative> list2 = zip3 list (tail list) (tail $ tail list) Prelude Control.Applicative> map (\(n1,n2,n3) -> n2 + n3 - 2*n1) list2 [3]
Алдар
то есть 3, верно
Алдар
take 4 seq1 [1,2,3,1]
Алдар
но тут дает 1
Алдар
блин я идиот, надо было писать take 4 seq2
Алдар
четвертый элемент верно вычисляет, но 5 нет, Prelude Control.Applicative> take 5 seq2 [1,2,3,3,0]
Igorek
А чё ты без аккумулятора считаешь? ) там по заданию с ним надо делать ;)
Алдар
через бесконечный список
Oleg
seq2 = 1:2:3:(map (\(n1,n2,n3) -> n2 + n3 - 2 * n1) $ zip3 seq1 (tail seq1) (tail $ tail seq1))
У тебя тут функция называется seq2, но ты рекурсивно вызываешь seq1 три раза. Так надо? :)
Алдар
работает Prelude Control.Applicative> seq2 = 1:2:3:(map (\(n1,n2,n3) -> n2 + n3 - 2 * n1) $ zip3 seq2 (tail seq2) (tail $ tail seq2)) Prelude Control.Applicative> take 10 seq2 [1,2,3,3,2,-1,-5,-10,-13,-13] Prelude Control.Applicative> take 20 seq2 [1,2,3,3,2,-1,-5,-10,-13,-13,-6,7,27,46,59,51,18,-49,-133,-218]
Oleg
^_^
Алдар
дорешиваю то что в прошлом году не успел)
Alexander
` <- таким обрамить
Alexander
три тильны
Alexander
блин кавычки, стандартный markdown
Алдар
много лишнего, map и zip объединить в zipWith уже предложили?
да, но когда три списка то zipWith не сработает
Alexander
zipWith3
Alexander
кстати уже дорешали?
Misha
а это реально лучше? даже с учетом stream fusion, ленивости, рожи и овощей?
Алдар
Alexander
просто меньше буков
Alexander
пожалуй людей кторые это парсить будут
Alexander
foldr/build deforestation так же отработать должна
Alexander
щас.. хотя нет
Alexander
так же не отрабтает на zip свалится
Alexander
stream.unstram бы отработал, до первого unzip
Alexander
нет, не все
на чем остановились
Алдар
на чем остановились
ту задачу с последовательностью я решил, сейчас интеграл надо посчитать трапециями, но там ничего сложного
Alexander
а да
Quet
@qnikst а чего ты аллена так не любишь? там какая-то драма была с его участием? вроде книжка норм у него, видео тоже не сказать что плохие
Alexander
Книжка отличная
Alexander
Да поругались хорошо во время истории с haskell-lang.org
Alexander
Они там поступили как мудаки, а он еще и оправдывался и всех посылал
Alexander
На норм вопрос, с какого черта вылил бочку говна, и как в последствии оказалось у очень разных людей мнение было похоже