Функциональное программирование, в прошлый раз мы говорили о морфизмах: эндоморфизм и изоморфизм. Сегодня продолжим говорить о морфизмах: гомоморфизм (homomorphism) .
Пусть (M, ⋅M, eM) и (N, ⋅N, eN) — два произвольных моноида (о моноидах мы говорили ранее). Функция h: M → N называется гомоморфизмом (homomorphism), если h(x ⋅M y) = h(x) ⋅N h(y) для любых x и y из M, и h(eM) = eN.
Примеры гомоморфизмов:
- Суммирование элементов списка чисел, произведение элементов списка чисел, нахождение минимального и максимального элементов списка чисел можно рассматривать как списочные гомоморфизмы hom(+, id, 0), hom(⋅, id, 1), hom(max, id, −∞) и hom(min, id, +∞) соответственно. Подобные списочные гомоморфизмы, у которых второй параметр является тождественным отображением id, будем коротко записывать reduce(⋅, e).
- Функция length, вычисляющая длину списка, является списочным гомоморфизмом hom(+, one, 0), где one(x) = 1.
- Функция, которая применяет некоторую функцию f к каждому элементу списка, тоже является списочным гомоморфизмом, а именно hom(++, g, []), где g(x) = [f(x)]. Такие функции будем коротко записывать как map(f).
- Функцию сортировки тоже можно представить в виде списочного гомоморфизма. А именно, пусть merge — функция слияния двух упорядоченных списков, list(x) = [x] — функция, превращающая элемент в одноэлементный список. Тогда гомоморфизм hom(merge, list, []) будет искомым списочным гомоморфизмом.
Уфф... сегодня получилось много математики в описании гомоморфизма, чтобы окончательно взорвать мозг в ссылке библиотека, которая haskell-style морфизмы портирует для javanoscript
Пусть (M, ⋅M, eM) и (N, ⋅N, eN) — два произвольных моноида (о моноидах мы говорили ранее). Функция h: M → N называется гомоморфизмом (homomorphism), если h(x ⋅M y) = h(x) ⋅N h(y) для любых x и y из M, и h(eM) = eN.
f(a * b) = f(a) * f(b)
A.of(f).ap(A.of(x)) == A.of(f(x))
Either.of(_.toUpper).ap(Either.of("oreos")) == Either.of(_.toUpper("oreos"))
Примеры гомоморфизмов:
- Суммирование элементов списка чисел, произведение элементов списка чисел, нахождение минимального и максимального элементов списка чисел можно рассматривать как списочные гомоморфизмы hom(+, id, 0), hom(⋅, id, 1), hom(max, id, −∞) и hom(min, id, +∞) соответственно. Подобные списочные гомоморфизмы, у которых второй параметр является тождественным отображением id, будем коротко записывать reduce(⋅, e).
- Функция length, вычисляющая длину списка, является списочным гомоморфизмом hom(+, one, 0), где one(x) = 1.
- Функция, которая применяет некоторую функцию f к каждому элементу списка, тоже является списочным гомоморфизмом, а именно hom(++, g, []), где g(x) = [f(x)]. Такие функции будем коротко записывать как map(f).
- Функцию сортировки тоже можно представить в виде списочного гомоморфизма. А именно, пусть merge — функция слияния двух упорядоченных списков, list(x) = [x] — функция, превращающая элемент в одноэлементный список. Тогда гомоморфизм hom(merge, list, []) будет искомым списочным гомоморфизмом.
Уфф... сегодня получилось много математики в описании гомоморфизма, чтобы окончательно взорвать мозг в ссылке библиотека, которая haskell-style морфизмы портирует для javanoscript
Список пунктов, которые нужно сделать перед тем как запускать свой сайт.
https://frontendchecklist.io/
https://frontendchecklist.io/
Продолжая тему нашей вчерашней встречи о росте синьерити: 32 совета веб разработчикам для того, чтобы рости над собой в 2020 году
https://medium.com/better-programming/32-tips-for-every-web-developer-in-2020-782fd6554f0d
https://medium.com/better-programming/32-tips-for-every-web-developer-in-2020-782fd6554f0d
Medium
32 Tips For Every Web Developer In 2020
Ideas to help you level up this year
Для участников нашего сообщества промо код со скидкой на fwdays: gseniority_fwdays
С чего начать изучение того или иного фреймворка, языка, библиотеки? Конечно с документации!
А потом, хорошо бы увидеть реальный пример использования выбранной технологии. По ссылке примеры реализации приложения на разных технологиях.
https://github.com/gothinkster/realworld
А потом, хорошо бы увидеть реальный пример использования выбранной технологии. По ссылке примеры реализации приложения на разных технологиях.
https://github.com/gothinkster/realworld
Уважаемые друзья! Хотелось бы узнать ваше мнение о том, что интересно видеть в нашем канале, выберите из списка или напишите в чате
Anonymous Poll
30%
Github tranding дайджест
68%
Интересные проекты из мира JavaScript
57%
Ссылки на статьи
26%
Мемасики
12%
Гифки
30%
Функциональное программирование
22%
Промо-коды конференций
1%
Свой вариант - напишу в чате
🇺🇦 Math.random(): javanoscript community pinned «Уважаемые друзья! Хотелось бы узнать ваше мнение о том, что интересно видеть в нашем канале, выберите из списка или напишите в чате»
Тимур Шемсединов опубликовал курс по node.js https://habr.com/ru/post/485294/
Хабр
Современный курс по Node.js в 2020
Дорогие товарищи инженеры, сообщество Метархия представляет вашему вниманию современный курс по Node.js , который включает глубокий разбор всех возможностей и аспектов платформы. Основной упор...
Библиотека, для создания анимаций с учетом законов физики. В ссылках снизу github репозиторий и react-spring визуализация.
https://www.react-spring.io/
https://www.react-spring.io/
Друзья, делимся фото с последней встречи - спасибо всем, кто присоединился и уже планируем следующий митап. Поделимся с вами подробностями уже в самое ближайшее время 😉 https://www.facebook.com/pg/Math.Random.community/photos/?tab=album&album_id=787924461684680
Facebook
Math.random
Math.random, Kyiv, Ukraine. 102 likes. We are the community of engineers connected around JS-based stack of technologies. The goal is to gather people . share knowledge between them. We are going to...
Лень читать длинную документацию? Не можешь вспомнить простые вещи о знакомых инструментах? Выход есть - набор шпаргалок для разработчика.
https://devhints.io/
https://devhints.io/
Бот для торговли криптовалютами на биржах. Написан на JavaScript. Будет полезен тем, кто решил завязать с разработкой и зарабатывать на криптовалютах.
https://github.com/DeviaVir/zenbot
https://github.com/DeviaVir/zenbot
Обучающий workshop который научит писать backend на node.js с использованием популярного фреймворка Nest.JS и выкладывать результат в Azure.
https://nitro-stack.github.io/nitro-workshop/
https://nitro-stack.github.io/nitro-workshop/
Большой список инструментов для создания статичных сайтов.
https://www.staticgen.com/
https://www.staticgen.com/
Jamstack.org
Static Site Generators - Top Open Source SSGs | Jamstack
Check out this showcase of some of the best, open source static site generators. This is community-drive so be sure to submit your favorite today!