thedeemon: (mosquito)
[personal profile] thedeemon
Есть такой подкаст о распределенных базах данных DevZen, почему-то выдающий себя за подкаст о программировании. Но недавно они сделали исключение, выгнали женщин и детей, пригласили двух замечательных гостей - Романа Чепляку, которого мы все любим за его Cartesian Closed Comics, и Дениса Шевченко, автора книжки "О Haskell по-человечески" - и получился довольно хороший и познавательный выпуск, рекомендую.

Роман рассказал, что в свое время интервьюировал не меньше двух десятков хаскеллистов в Киеве, и практически никто не смог во время интервью решить такую задачку: есть длинный список чисел, надо найти их среднее арифметическое за один проход по списку и О(1) памяти. Занятно.
Page 1 of 5 << [1] [2] [3] [4] [5] >>

Date: 2015-07-05 04:34 am (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Пытаюсь переварить про среднее арифметическое.
Неужели такая нехватка общего образования... аяяй.
В Питере бы сразу сказали: "посчитаем моменты".

Date: 2015-07-05 04:56 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Тут чисто хаскелевая специфика, на ML или Скале или даже С++ это было бы просто. Но перенос такого решения в лоб на хаскель приводит к порождению цепочки недовычисленных санков. Ибо ленивость. А это не O(1).

Date: 2015-07-05 04:59 am (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Серьезно, просто брать моменты фолдом не получится?!

Date: 2015-07-05 05:17 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Получится, если правильный фолд выбрать (там разные, в том числе по ленивости отличающиеся), и если у передаваемой функции правильно аннотации строгости расставить. Вопрос как раз об этом.

Date: 2015-07-05 06:13 am (UTC)
From: [identity profile] os80.livejournal.com
>и если у передаваемой функции правильно аннотации строгости расставить
Подождите, можно с этого места поподробнее? Т.е. просто foldl' недостаточно, надо ещё про тип функции думать?

Date: 2015-07-05 07:54 am (UTC)
From: [identity profile] kodt-rsdn.livejournal.com

Присоединяюсь к Ивану Ганди.
Казалось бы, foldl' во всех уччебниках для детей есть.
Или хаскеллисты стали умствовать про то, что арифметика нужна длинная, а это уже сразу O(n)... даже без лени и Шлемюэля?


Хотя да, нужно делать энергичный кортеж (количество,сумма), иначе фолдл его только до конструктора форсирует, а внутри будут санки.

Date: 2015-07-05 07:57 am (UTC)
From: [identity profile] kodt-rsdn.livejournal.com

Не про тип, а про строгость потрохов. Нв типе это не скажется.

Date: 2015-07-05 08:09 am (UTC)
From: [identity profile] dmzlj.livejournal.com
Отличный наброс, типа "хаскеллисты все тупые".

Неужели прям ни одного не нашлось, кто бы написал
явную рекурсию со строгим аккумулятором, т.е аналог
явного цикла, как Си?
Edited Date: 2015-07-05 08:10 am (UTC)

Date: 2015-07-05 08:16 am (UTC)
From: [identity profile] gineer.livejournal.com
\\Роман рассказал, что в свое время интервьюировал не меньше двух десятков хаскеллистов в Киеве, и практически никто не смог во время интервью решить такую задачку: есть длинный список чисел, надо найти их среднее арифметическое за один проход по списку и О(1) памяти. Занятно.

А что же тут удивительного?
Чай не императивщики. :) разглядывать ассемблерный код своего поделия не будут.

Date: 2015-07-05 08:24 am (UTC)
From: [identity profile] dmzlj.livejournal.com
Ну на это можно ответить собственными историями про собеседование эмбедщиков, которые постоянно рассматривают свой код на ассемблере. Или джавистов.

Ну или вот взять людей выше по треду, которые путают асимптотику алгоритма со способом интерпретации, хотя способ интерпретации добавляет лишь константу.

Date: 2015-07-05 08:55 am (UTC)
From: [identity profile] sassa-nf.livejournal.com
ну или seqами добиться

Date: 2015-07-05 09:30 am (UTC)
From: [identity profile] thedeemon.livejournal.com
"практически никто" - значит кто-то грамотный все же был

Date: 2015-07-05 09:30 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Константа не вызывает space лики знаменитые.
Edited Date: 2015-07-05 09:32 am (UTC)

Date: 2015-07-05 09:34 am (UTC)
From: [identity profile] dmytrish.livejournal.com
Интересно, конечно. Я интервьюировался когда-то давно не у Романа, но в той же конторе, завалился на fold’ах и их ленивом поведении — в принципе, вполне заслужено, базовая вещь. Но поверить в то, что люди не могут взять среднее арифметическое за один проход — это уже как-то за гранью. Видимо, мое углубление в реализации функциональных языков с тех пор не прошло даром.

Date: 2015-07-05 09:53 am (UTC)
From: [identity profile] dmytrish.livejournal.com
Как сказать, когда меня-новичка завалили на фолдах, я знал, что foldl — это плохо и что там O(n2) может накапливаться, но объяснить механику редукций, которая к этому приводит, я за время собеседования не смог. То есть я действительно читал haskell wiki, но вынес для себя только один, практический урок: foldl — зло, не употреблять, а в детали углубляться не стал.

А требовалось именно кристально чистое понимание того, как накапливаются санки, и последовательности редукции.

Date: 2015-07-05 10:13 am (UTC)
From: [identity profile] kodt-rsdn.livejournal.com
Ну это я и имел в виду. Не городить же новый тип ради такой мелочи.

Date: 2015-07-05 10:37 am (UTC)
From: [identity profile] dev117.livejournal.com
А как найти среднее арифметическое за один проход?

Date: 2015-07-05 11:41 am (UTC)
From: [identity profile] dmytrish.livejournal.com
Это был EPAM/Barcleys, но Романа уже не было (август 2013 (http://dmytrish.livejournal.com/46655.html)), меня собеседовал Веселов и еще кто-то, с кем я бы не очень хотел работать.

Date: 2015-07-05 11:47 am (UTC)
From: [identity profile] dmzlj.livejournal.com
Оптимизатор умеет делать какой надо фолд. На практике никакого профита замена foldl на foldl' не даёт, если собирать с оптимизацией.

Date: 2015-07-05 11:51 am (UTC)
From: [identity profile] dmytrish.livejournal.com
Вот да, в Хаскеле приятно, когда strictness analyzer подчищает за тобой всякую мелочь, но вот когда он подчистить не может — все, приехали, и тут уже, похоже, надо быть джедаем.

Date: 2015-07-05 12:01 pm (UTC)
From: [identity profile] dmzlj.livejournal.com
Тут надо брать в руки профайлер. Не, ну все знают что "рассуждения об асимптотике программ на хаскелле затруднены". Но можно написать так, а можно "хаскеллисты дебилы, хаскелл не нужен". Даже если автор топика это и не имел ввиду, то читатели-неосиляторы прочитают именно так.

Date: 2015-07-05 12:15 pm (UTC)
From: [identity profile] dmytrish.livejournal.com
Некоторым даже и такого поста не нужно, чтобы это утверждать :)

Я не знаю, возможно, на собеседовании люди действительно были больше теоретиками-экстремистами, которые верили, что формальное рассуждение о структуре программы лучше, чем профилирование, хотя о профилировании они тоже упоминали.

С другой стороны, надо понимать, куда именно seq и знаки восклицания вставлять, даже когда профайлер показывает конкретное место/структуру.

Но вообще, мне кажется, что проблемы с ленивостью — это проблемы недоразвитости теории, и что в идеале компилятор/tracing vm должны сами определять оптимальный порядок вычисления. А вот отказываться от ленивости non-strictness — это уже луддитство.
Edited Date: 2015-07-05 12:16 pm (UTC)

Жопоболь

Date: 2015-07-05 12:36 pm (UTC)
From: [identity profile] livejournal.livejournal.com
Пользователь [livejournal.com profile] nponeccop сослался на вашу запись в своей записи «Жопоболь (http://nponeccop.livejournal.com/449682.html)» в контексте: [...] http://thedeemon.livejournal.com/101735.html [...]

Date: 2015-07-05 12:40 pm (UTC)
From: [identity profile] nponeccop.livejournal.com
за гранью, блин. Одновременно считать сумму и длину, а потом поделить

Date: 2015-07-05 12:42 pm (UTC)
From: [identity profile] nponeccop.livejournal.com
так foldl' полностью эквивалентен явной хвостовой рекурсии. Собственно, фишка в том, как сделать составной аккумулятор строгим.
Edited Date: 2015-07-05 12:43 pm (UTC)
Page 1 of 5 << [1] [2] [3] [4] [5] >>

Profile

thedeemon: (Default)
Dmitry Popov

December 2025

S M T W T F S
 12 3456
789101112 13
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 25th, 2026 01:34 pm
Powered by Dreamwidth Studios