Как стать автором
Обновить
5.6

F# *

Язык из семейства языков .NET Framework

Сначала показывать
Порог рейтинга
Уровень сложности

F# на примере решения олимпиадной математической задачи

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров4.3K

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

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии14

Грокаем Traversable

Время на прочтение12 мин
Количество просмотров1.9K

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

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии2

Грокаем валидацию при помощи аппликативного функтора

Время на прочтение7 мин
Количество просмотров1.2K

В предыдущем посте мы открыли Аппликативный функтор, а если точнее, изобрели функцию apply. С ее помощью мы решили проблему валидации полей кредитной карты. Функция apply позволила легко объединить результаты каждой функции, отдельно проверяющей одно поле - номер карты, срок действия и CVV - в объект типа Result<CreditCard>, который представляет финальный результат проверки всех данных кредитной карты на корректность. Возможно, вы также помните, что в случае если у нас есть несколько ошибок валидации, мы решили пойти простым путем и просто возвращать первую из них.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Тест – это вещь! F#, тестирование на базе Expecto. Часть вторая

Время на прочтение13 мин
Количество просмотров984

В прошлой части мы разобрали базис тестового фреймворка Expecto. В этой рассмотрим основные подходы написания тестов в контексте Expecto и постепенно перейдём к обобщённым преимуществам-следствиям концепции “тест-объект”. Часть выводов по ходу статьи могут быть полезны и не F#-истам. Однако, как говорилось в первой части, изначально это был монолитный текст, что был разделён почти механически, и я не берусь оценить усвояемость данного материала в отрыве от первой части.

Читать далее
Всего голосов 6: ↑5 и ↓1+4
Комментарии0

Истории

Грокаем аппликативные функторы

Время на прочтение8 мин
Количество просмотров4.5K

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

Читать далее
Всего голосов 11: ↑11 и ↓0+11
Комментарии2

Тест – это вещь! F#, тестирование на базе Expecto. Часть первая

Время на прочтение11 мин
Количество просмотров1.4K

Expecto — фреймворк для тестирования, написанный на F# и для F#. Он довольно хорошо известен в рамках F#-сообщества, и у разработчиков, сумевших отгородиться от C# в достаточной степени, используется как платформа для тестов по умолчанию. Новички в F#, а также мимо проходящие C#-еры, как правило, не обращают внимания на данный фреймворк до первого красного теста. А после знакомства впадают в лёгкий аналитический паралич. Ибо то, что со стороны выглядит как ещё один @"{Prefix}Unit" фреймворк для тестирования, на практике оказывается переосмыслением привычных практик.

В данной статье я попробую широкими мазками описать онтологический аппарат Expecto и показать наиболее естественный путь его подчинения. Это не рулбук, а одноразовое введение, которое я предпочёл бы видеть вместо (или до) существующего README.md в официальном репозитории. Также я постараюсь обойтись максимально локальными примерами кода, дабы текст можно было прочитать, не слезая с самоката.

Читать далее
Всего голосов 9: ↑9 и ↓0+9
Комментарии0

Как я сделал самый быстрый в мире файловый сервер

Время на прочтение16 мин
Количество просмотров21K

Задача — среди множества файлов найти на диске конкретный и отдать его по HTTP с заголовками «content-encoding», «mime-type» и «content-lenght». И сделать это как можно быстрее — на локальном хосте, чтобы не уткнуться в физические барьеры. Нас интересует скорость ради скорости.

В качестве веб-сервера будем использоваться Kestrel, .NET 7 RC 1, minimal API и F#. Финальная, оптимизированная версия есть и для C#.
Читать дальше →
Всего голосов 74: ↑65 и ↓9+56
Комментарии18

Грокаем функторы

Время на прочтение6 мин
Количество просмотров11K

Это перевод статьи из целого цикла постов "Грокаем функциональное программирование" Мэта Торнтона. Я позволил себе немного поменять порядок постов. В оригинале, функторы идут после монад, что мне показалось неверным. Всякая монада - это функтор, но не всякий функтор - это монада. Также я убрал дублирование из поста про монады и добавил необходимые пояснения. Мне нравится практическая направленность материала. Он довольно подробно останавливается на базовых вещах, так что скорее предназначен для тех, кто только знакомится с функциональным программированием.

В этом посте мы постараемся разобраться, что такое функтор собственноручно переизобретая его на рабочем примере.

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии11

Грокаем монады императивно

Время на прочтение7 мин
Количество просмотров5.6K

В предыдущем посте мы переизобрели Монаду на рабочем примере. У нас получился базовый механизм в виде функции andThen для типа option, но мы еще не достигли нашей конечной цели. Мы надеялись, что получится написать код, так же как если бы нам не нужно было обрабатывать значения option. Мы хотели писать в более "императивном" стиле. В этой части мы увидим как достичь этого при помощи технологии computation expressions языка F#, а также углубим наше понимание Монад.

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии8

Discriminated Unions в C#

Время на прочтение3 мин
Количество просмотров8.5K

Всем привет. Среди многих интересных концепций, имеющихся в F#, меня привлекли Discriminated Unions. Я задался вопросом, как их реализовать в C#, ведь в нем отсутствует поддержка (синтаксическая) типов объединений, и я решил найти способ их имитации.

Discriminated Unions - тип данных, представляющий собой размеченные объединения, каждый из которых может состоять из собственных типов данных (также именованных).

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

Для создания своих Discriminated Unions будем использовать эту мысль

Читать далее
Всего голосов 14: ↑14 и ↓0+14
Комментарии13

Грокаем монады

Время на прочтение7 мин
Количество просмотров12K

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

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

Читать далее
Всего голосов 28: ↑23 и ↓5+18
Комментарии23

Цитирование в языках программирования

Время на прочтение4 мин
Количество просмотров9.4K

Задачу я встретил, решая упражнения из книги Структура и Интерпретация Компьютерных Программ).

Раздел 2.3 посвящён цитированию в LISP и символическим вычислениям.

Обычные — несимволические — вычисления сводятся к расчётам с помощью арифметических операций. Если я попрошу вас вычислить производную функции x^2в точке x=17, вы можете сделать это по формуле при каком-нибудь не очень большом значении dx.

Подробнее о символических вычислениях
Всего голосов 23: ↑23 и ↓0+23
Комментарии23

Очень типобезопасно! Концепт продвинутой расширяемой системы единиц измерения с generic math для .NET

Время на прочтение3 мин
Количество просмотров4.9K

Что может быть лучше десятка пары часов проведенных с дженериками и compile time safety в C#?

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

Читать далее
Всего голосов 23: ↑23 и ↓0+23
Комментарии15

Ближайшие события

Научитесь создавать приложения на F#

Время на прочтение2 мин
Количество просмотров8.4K

Вы можете быть новичком в .NET или опытным разработчиком C#/VB.NET, который хочет расширить свои горизонты. В любом случае, F# -- отличный язык для изучения.

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

Если вы хотите изучить F#, сейчас идеальное время -- у нас есть много свежих видео, курсов и многого другого, чтобы помочь вам начать работу уже сегодня.

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Комментарии7

Обновление AngouriMath 1.3

Время на прочтение5 мин
Количество просмотров2.6K

Четыре месяца работы вместе с небольшим количеством новых контрибьютеров наконец-то дали свои плоды в виде нового большого релиза, с которым с удовольствием автор хочет Вас познакомить

Теперь в AngouriMath есть инструменты работы с матрицами, улучшенный парсер, много новых функций, практически полностью переписанный пакет Interactive (для работы в Jupyter) и многое другое.

Эта статья повествует о большом обновлении в FOSS библиотеке символьной алгебры для .NET

Читать далее
Всего голосов 10: ↑10 и ↓0+10
Комментарии0

Основы функционального программирования на Python

Время на прочтение19 мин
Количество просмотров57K

Этот пост служит для того, чтобы освежить в памяти, а некоторых познакомить с базовыми возможностями функционального программирования на языке Python. Материал поста разбит на 5 частей:

Читать далее
Всего голосов 11: ↑9 и ↓2+7
Комментарии42

Функциональное ядро в виде конвейера на Python

Время на прочтение12 мин
Количество просмотров9.1K

Главная задача этого поста – показать один мало применяемый на языке Python архитектурный шаблон под названием «функциональное ядро - императивная оболочка», в котором функциональный код концентрируется внутри, а императивный код выносится наружу в попытке свести на нет недостатки каждого из них. Известно, что функциональные языки слабы при взаимодействии с «реальным миром», в частности с вводом данных пользователем, взаимодействием с графическим интерфейсом или другими операциями ввода-вывода. В рамках такого подхода весь императивный код выталкивается наружу, и внутри остается только функционально-ориентированный.

Читать далее
Всего голосов 9: ↑1 и ↓8-7
Комментарии78

Две недели с F#

Время на прочтение7 мин
Количество просмотров12K
А вы когда-нибудь записывали свои впечатления от изучения нового языка? Записывали все, что вам не понравилось, чтобы через пару недель изучения понять, насколько недальновидными и тупыми они были? 



На днях я понял F#, и попытаюсь описать словами мысль, стоящую за языком. 
Читать дальше →
Всего голосов 57: ↑45 и ↓12+33
Комментарии22

Что нового в AngouriMath 1.2?

Время на прочтение5 мин
Количество просмотров2.3K

Спустя 210 дней, 600 коммитов, десятки дебажных ночей и тысячи сообщений в обсуждениях проекта, я таки выпустил релиз AngouriMath 1.2.

Это небольшая опен-сорсная библиотека символьной алгебры для C# и F#, но вдруг кому-нибудь интересно?

Читать далее
Всего голосов 24: ↑24 и ↓0+24
Комментарии2

Работаем с notebook в VS Code с помощью расширения «dotnet interactive»

Время на прочтение4 мин
Количество просмотров7.2K

Сегодня я хочу рассказать вам о таком замечательном инструменте как "dotnet interactive". Я покажу на своём примере как и для чего я начал его использовать, и вкратце опишу с чего начать.

Читать далее
Рейтинг0
Комментарии2