Size: a a a

Хирьянов Т.Ф., Практика программирования на Python 3 (2019)

2020 August 07

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Причем он вдыхает, и потом выдыхает дымом, а когда я вдыхаю, то при выдохе дим еле-еле идет..
источник

E

Egor in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Nick Pershyn
Я на работе был - мы отмечали запуск продукта, накурился кальяна, меня кое-как колеги довезли домой. Потихоньку прихожу в себя. Щас все расскажу.
что за продукт?
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
источник

E

Egor in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
прилично
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Итак, есть имеперативная парадигма программирования, а есть функциональная.
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Соответственно можно писать циклы, а можно использовать рекурсию.
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
В функционально парадигме часто стараются избавиться от побочных эффектов. Например в С++, или питоне есть переменные, значения которых по мере выполнения программы меняются. В Haskell есть значения, которые не меняются.
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Если программировать в функциональном стале, то также становится понятно, что порядок вычисления значений не имеет значения.
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Это сильно упрощает написание многопоточных приложений.
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Также функциональная парадигма часто вступает в конфликт с ООП.
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Также сильно упрощается рефакторинг.
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
То есть код потом будет очень легко поддерживать.
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Минусы конечно тоже есть. Высокий порог вхождения. Приходится мыслить по другому, используются другие структуры данных, а написание алгоритном становится иногда весьма нетривиальной задачей...
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Ведь я не могу указать, что именно делать... Вместо этого я указываю что посчитать.
источник

ДК

Даниил Кустов... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Nick Pershyn
Ведь я не могу указать, что именно делать... Вместо этого я указываю что посчитать.
Ассемблер какой-то прям
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
И судить о сложности алгоритма сложнее становится, ведь компилятор может менять его сложность.
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
В ассемблере я четко могу прописать последовательность инструкций. В Хаскеле я должен объяснить, что именно надо посчитать, а компилятор уже решит, как именно оно будет считаться.
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Например числа фибоначи можно считать с помошью цикла в С++ или питоне. А что делать, если циклов нет? Можно считать рекурсией. А когда считаем рекурсией, то можно запоминать вызовы с определенными аргументами и результаты их выполнения, чтобы не вычислять повторно одно и тоже. Однако я как программист понимаю, что для вычисления n-го числа требуется вычисление всех предыдущих, так что я могу использовать мемоизацию. То есть я могу определить список, в котором будут хранится числа фибоначи и как их считать. Вычисления можно упорядочить задав между ними зависимости, а если нас интересует только конечный результат, то значит премежуточные значения нам не интересны. Вот так и получается, что в функциональном языке я говорю, что считаю последовательность, потом беру n-й ее член, а все остально мне не нужно и тогда компилятор это скомпилит правильно, а оптимизации превратят это во что-то вроде цикла.
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
То есть оптимизация сократит сложность по памяти с линейной на константу.
источник

NP

Nick Pershyn in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Если же я напишу это в виде обычной рекурсии(с запоминанием возвращаемых значений), то сложность скорее всего будет линейной по памяти...
источник