Метка «функциональное программирование»

Эта статья является продолжением "Итерируем всё вместе с Collection" и здесь я расскажу о встроенном механизме Collection — фильтрах.

Читать полностью »

В современном JavaScript существует целый пласт различных видов итерируемых структур данных:

  • Array
  • TypedArrays
  • Object
  • Map
  • Set
  • String

А также появились генераторы и универсальный протокол @@iterator, который позволят итерировать что угодно и как угодно. И в тоже время для некоторых типов данных (в основном для массивов) определены различные методы для удобной функциональной работы и простого итерирования, например, forEach, map или reduce, и всё было бы хорошо, однако:

  • Большинство методов определены только для массивов;
  • Определяемое API слишком примитивно и не покрывает целый ряд задач;
  • До сих пор скорость выполнения нативных итераторов далека от идеала и существенно уступает реализации на циклах.

Читать полностью »

imageДоброго ночи! Мы продолжаем изучение Erlang для самых маленьких.

В прошлой главе мы рассмотрели как объявлять функции и как объединять их в модули. В этой главе мы рассмотрим синтаксис функций более подробно.

Читать полностью »

Проект по написанию книги «Квантовые вычисления и функциональное программирование»Идея книги про модель квантовых вычислений появилась у меня в голове уже давно. Сразу после прохождения курса по квантовой механике и квантовым вычислениям на Coursera (краткое описание см. здесь) у меня в голове родился вопрос: «Почему же это курс по квантовым вычислениям устроен так, что программисту он довольно непонятен, но, скорее, рассчитан на физика?». Сама модель квантовых вычислений меня поразила до глубины души, и после глубочайших раздумий я начал поглощать одну книгу за другой, одну статью за другой. В итоге после прочтения и изучения более 20 источников на русском языке я прихожу к неутешительному выводу — ещё не написана книга о модели квантовых вычислений, которая объясняла бы эту модель прикладному программисту. Ведь что получается? Большинство источников сегодня рассказывают про ядерные спины, ионные ловушки, нотацию Дирака и суперпозицию, объясняя всё это для физика. Но как прикладной программист очень часто не имеет никакого понятия по физических процессах, происходящих внутри обычного процессора, так и в данном случае разъяснение физических принципов реализации унитарных преобразований в виде особого вида гамильтонианов в уравнении Шрёдингера больше затуманивает суть вещей для разработчика программ, нежели раскрывает красоту и мощь этой новой модели.

Именно эти размышления побудили меня начать обдумывание идеи о написании книги про квантовые вычисления, в которой не было бы акцента на физике процессов, но в которой давалось бы вполне доступное понимание того, как создавать квантовые алгоритмы. Ведь, например, вопросам квантовой схемотехники и проектированию алгоритмов в существующей литературе по квантовым вычислениям вообще не уделяется никакого внимания. Более того, в некоторых книгах говорится о том, что все существующие на сегодняшний момент квантовые алгоритмы являются результатом снизошедших на гениев озарений. Отчасти, это вполне так, поскольку квантовая механика в своей основе контр-интуитивна. Но разъяснить именно программисту-прикладнику то, как строить квантовые схемы для получения того или иного результата, вполне возможно.

Читать полностью »

Занимались мы как-то обработкой аудио на Java с помощью сложных алгоритмов. Каждый кусочек аудио должен был пройти длинную цепочку обработки (20-50 алгоритмов разной степени сложности). Потоки аудио поступали параллельно, алгоритмы работали параллельно, и завершались в разные моменты. Некоторые алгоритмы нуждались в разной степени буферизации. Из кусочков аудио извлекалась информация повышающегося уровня абстракции, то есть начиная с какого-то уровня уже шло не аудио, а извлечённая информация об этом аудио.

Всё хозяйство должно было работать в рамках одного экземпляра приложения, но при этом должно было быть несколько вложенных почти независимых очень похожих контейнеров для клиентского кода (типа Bean'ов).

С самого начала мы не ставили задачу всеобщей унификации, и решали в каждой части системы по своему. Где-то использовали потоки для длительных задач, где-то создавали цепочки вызовов, где-то — модель подписки. Так как система была довольно большой, то практически все известные способы декомпозиции и обработки были задействованы в той или иной степени. Потом мы обнаруживали общность и реализовывали похожие решения в разных частях системы. А потом изобрели первую версию того, что сейчас мы называем система контактов или SynapseGrid.
Читать полностью »

Привет Habr! Сегодня мы поговорим о полиморфизме функций, операторах и карринге. Напоминаю, что лекции рассчитаны на новичков, а конспект предпологает сжатую форму изложения. Если все еще интересно… Читать полностью »

image
Привет Habr! Сегодня я достал свои старые лекции по курсу «Haskell как первый язык программирования» Сергея Михайловича Абрамова и попробую максимально доходчиво и с примерами рассказать об этом замечательном языке тем, кто с ним еще не знаком. Рассказ ориентирован на неподготовленного читателя. Так что, даже если вы впервые услышали слово Haskell… Читать полностью »

Добрый дня, уважаемыее. Всегда трудно начинать. Трудно начать писать статью, трудно начать отношения с человеком. Очень трудно, бывает, начать изучать новый язык программирования, особенно, если этот язык рушит все представления и устои, которые у вас были, если он противоречит привычной картине мира и пытается сломать вам мозг. Пример такого языка — Haskell.
Читать полностью »

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

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

Как и раньше, в посте будет множество гиперссылок и кода. А ещё больше — кириллических букв.

Всё как в старые добрые времена. Добро пожаловать, друг.

Читать полностью »

imageДоброго вечера, дорогие Хабровчане. Мы продолжаем изучение Erlang для самых маленьких.

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

В этой главе мы поднимемся на следующую ступень и рассмотрим модули и функции.

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js