В предыдущем посте мы переизобрели Монаду на рабочем примере. У нас получился базовый механизм в виде функции andThen
для типа option
, но мы еще не достигли нашей конечной цели. Мы надеялись, что получится написать код, так же как если бы нам не нужно было обрабатывать значения option
. Мы хотели писать в более "императивном" стиле. В этой части мы увидим как достичь этого при помощи технологии computation expressions
языка F#, а также углубим наше понимание Монад.
F# *
Язык из семейства языков .NET Framework
Discriminated Unions в C#
Всем привет. Среди многих интересных концепций, имеющихся в F#, меня привлекли Discriminated Unions. Я задался вопросом, как их реализовать в C#, ведь в нем отсутствует поддержка (синтаксическая) типов объединений, и я решил найти способ их имитации.
Discriminated Unions - тип данных, представляющий собой размеченные объединения, каждый из которых может состоять из собственных типов данных (также именованных).
Идея в том, что мы имеем ограниченное количество вариантов выбора, и каждый вариант может состоять из своего набора данных, никак не связанных с другими, но все варинанты объединены общим подтипом.
Для создания своих Discriminated Unions будем использовать эту мысль
Грокаем монады
Самый распространенный способ объяснить монаду - зайти через теорию категорий. Знать, что монада - это моноид в категории эндофункторов и увлекательно и полезно для общего развития, но слабо помогает в практическом смысле. Второй, равный по популярности прием - прибегнуть к помощи образов, и вот мы уже складываем значения в коробочки и достаем их оттуда (или, вообще кошмар, катимся по железной дороге). Не спорю, образы - хороший способ посмотреть на явление, но тут мы равно удалились и от теории категорий и от практики.
Автор, подобно лектору по математике, у которого вылетело из головы доказательство теоремы и он доказал ее прямо у доски, ориентируясь на интуитивное представление, как бы хотелось решить задачу, постепенно пробирается от корявого куска кода к лаконичному.
Цитирование в языках программирования
Задачу я встретил, решая упражнения из книги Структура и Интерпретация Компьютерных Программ).
Раздел 2.3 посвящён цитированию в LISP и символическим вычислениям.
Обычные — несимволические — вычисления сводятся к расчётам с помощью арифметических операций. Если я попрошу вас вычислить производную функции в точке , вы можете сделать это по формуле при каком-нибудь не очень большом значении .
Истории
Очень типобезопасно! Концепт продвинутой расширяемой системы единиц измерения с generic math для .NET
Что может быть лучше десятка пары часов проведенных с дженериками и compile time safety в C#?
В этом очерке о единицах измерения, а точнее о том, как можно сделать потенциально очень крутую систему с полной проверкой на этапе компиляции, автоматической конверсией единиц измерения, кастомизированностью и расширяемостью во все стороны! Да, и еще неплохой производительностью. И вообще!
Научитесь создавать приложения на F#
Вы можете быть новичком в .NET или опытным разработчиком C#/VB.NET, который хочет расширить свои горизонты. В любом случае, F# -- отличный язык для изучения.
F# позволяет легко писать сжатый, надежный и производительный код. Он имеет легкий синтаксис, который требует очень мало кода для создания ПО. Он поддерживается мощной системой типов, удобной библиотекой и средой выполнения .NET, которой вы можете доверять создание правильных, быстрых и надежных программ.
Если вы хотите изучить F#, сейчас идеальное время -- у нас есть много свежих видео, курсов и многого другого, чтобы помочь вам начать работу уже сегодня.
Обновление AngouriMath 1.3
Четыре месяца работы вместе с небольшим количеством новых контрибьютеров наконец-то дали свои плоды в виде нового большого релиза, с которым с удовольствием автор хочет Вас познакомить
Теперь в AngouriMath есть инструменты работы с матрицами, улучшенный парсер, много новых функций, практически полностью переписанный пакет Interactive (для работы в Jupyter) и многое другое.
Эта статья повествует о большом обновлении в FOSS библиотеке символьной алгебры для .NET
Основы функционального программирования на Python
Этот пост служит для того, чтобы освежить в памяти, а некоторых познакомить с базовыми возможностями функционального программирования на языке Python. Материал поста разбит на 5 частей:
Функциональное ядро в виде конвейера на Python
Главная задача этого поста – показать один мало применяемый на языке Python архитектурный шаблон под названием «функциональное ядро - императивная оболочка», в котором функциональный код концентрируется внутри, а императивный код выносится наружу в попытке свести на нет недостатки каждого из них. Известно, что функциональные языки слабы при взаимодействии с «реальным миром», в частности с вводом данных пользователем, взаимодействием с графическим интерфейсом или другими операциями ввода-вывода. В рамках такого подхода весь императивный код выталкивается наружу, и внутри остается только функционально-ориентированный.
Что нового в AngouriMath 1.2?
Спустя 210 дней, 600 коммитов, десятки дебажных ночей и тысячи сообщений в обсуждениях проекта, я таки выпустил релиз AngouriMath 1.2.
Это небольшая опен-сорсная библиотека символьной алгебры для C# и F#, но вдруг кому-нибудь интересно?
Работаем с notebook в VS Code с помощью расширения «dotnet interactive»
Сегодня я хочу рассказать вам о таком замечательном инструменте как "dotnet interactive". Я покажу на своём примере как и для чего я начал его использовать, и вкратце опишу с чего начать.
Букварь по F# для любопытствующих C#-разработчиков
Предисловие
Мой переход на F# в качестве излюбленного языка был слегка усеян препятствиями. Примерно через десять лет почти постоянного использования C# у меня пробудилось любопытство, когда я услышал об этом другом #-языке. Моя первая реакция была той, которую с тех пор видел у других C#-разработчиков — отрицание, — C# является хорошим языком, и мне с ним комфортно, так зачем тратить силы на изучение другого? Но любопытство осталось — и, по крайней мере, несколько раз выделил вечер, чтобы прочитать базовый вводный пост и попытаться написать каких-нибудь ката на F#. Это не прижилось, потому что я просто чувствовал себя потерянным и не мог воплотить свой опыт использования C# в ощущение даже отдаленного комфорта с F#. Достаточно легко опустить фигурные скобки, немного замяться, чтобы не забыть let
вместо var
— но как сделать то, что я хотел?
Тогда я этого не осознавал, но, на мой взгляд, наблюдал потенциальный недостаток в том, как F#-разработчики говорят, описывают и представляют свой язык внешнему миру. Существует обширная база материалов обо всех возможностях и функциональности F#: Algebraic Data Types, Exhaustive Matching, Type Inference и т.д. Есть много статей, посвященных тому, как решать широкий спектр задач с помощью F#. Но, как мне кажется, не хватает чего-то вроде следующего: некоторых указаний о том, как взять то, что вам уже удобно в C#, и перевести их на F#. Так что мне интересно, можем ли мы как-то закрыть этот недостаток.
Ближайшие события
Пример прикладного проекта на F#
Язык F# уступает в популярности C#. Вместе с тем, во многом благодаря сообществу, фаршик стал реальной альтернативой для прикладных проектов. В статье описаны ингредиенты бэкенда, фронтенда, тестов, сборки и инфраструктуры проекта, полностью написанного на F#. Исходный код прилагается.
Jupyter для .NET. «Как в питоне»
Entity
из библиотеки символьной алгебры:Выглядит круче, чем в питоне. Делается просто, доставляет массу удовольствия. Приглашаю под кат!
Асинхронность в C# и F#. Подводные камни асинхронности в C #
Еще в феврале я присутствовал на ежегодном саммите MVP — мероприятии, организованном Microsoft для MVP. Я воспользовался этой возможностью, чтобы посетить также Бостон и Нью-Йорк, сделать два выступления про F# и записать лекцию Channel 9 о провайдерах типов. Несмотря на другие мероприятия (такие как посещения пабов, общение с другими людьми про F# и долгий сон по утрам), мне также удалось провести несколько обсуждений.
Представляем .NET 5.0 Preview 6
Вы можете скачать .NET 5.0 Preview 6, для Windows, macOS и Linux:
ASP.NET Core и EF Core также были выпущены на прошлой неделе. Примечание: EF Core 5.0 не будет поддерживать .NET Standard 2.0 или .NET Framework. Читайте пост о выпуске EF Core чтобы узнать больше.
Вам нужно использовать Visual Studio 2019 16.7 для работы с .NET 5.0. .NET 5.0 теперь поддерживается в Visual Studio for Mac. Установите последнюю версию расширения C# для использования .NET 5.0 с Visual Studio Code.
Заметки:
Основатель F# сообщества: «ООП и ФП головного мозга должны умереть»// Мы обречены #7
Полтора года назад я писал статью про сообщество F# разработчиков. Мне казалось странным, что люди, у которых есть столько возможностей для карьерного развития, бросают гигантские силы на изучение странного не особо кому нужного языка.
Но внутри я встретил самое дружелюбное и живое сообщество разработчиков из всех, с кем общался. Пацаны приводили много логичных доводов почему они выбрали F#, но у меня все равно осталось впечатление, что они выбирают не умом, а сердцем. Очень необычная фигня для такой прагматичной индустрии.
Спустя полтора года после статьи я позвал Романа Мельникова на подкаст и обсудил, как все обстоит сейчас.
F#, увеличение контраста изображения путем выравнивания гистограмм
Операция выравнивания гистограмм (увеличение контраста) часто используется для увеличения качества изображения. В рамках этой статьи будет рассмотрено понятие гистограммы, теория алгоритма для ее выравнивания, практические примеры работы этого алгоритма. Для облегчения обработки изображений, мы будем использовать библиотеку OpenCV. Также, сделаем сравнительный анализ результатов работы нашего алгоритма и алгоритма, который уже встроен в OpenCV.
F#, морфология бинарных изображений
Введение
Применительно к бинарным изображениям, морфология используется для описания каких либо свойств этого изображения. А операции математической морфологии используются для преобразований множеств. В этом плане их удобно использовать для обработки бинарных изображений с последующим анализом.
В статье будут рассмотрены основные операции математической (бинарной) морфологии в контексте F#. А также, в конце статьи я приведу пример анализа полученного результата, который может быть использован в алгоритмах машинного зрения.
Вклад авторов
-
shwars 217.2 -
Amper 127.0 -
fillpackart 125.6 -
kagetoki 113.0 -
olegchir 112.0 -
oldadmin 89.0 -
WhiteBlackGoose 79.2 -
ApeCoder 77.6 -
sahsAGU 76.4 -
kernelmode 75.0