Здравствуйте, уважаемые читатели! Наши искания в области языка C# серьезно перекликаются с этой статьей, автор которой — специалист по функциональному программированию на C#. Статья — отрывок из готовящейся книги, поэтому в конце поста предлагаем за эту книгу проголосовать.
Рубрика «функциональное программирование» - 29
Язык C# почти функционален
2017-02-10 в 7:01, admin, рубрики: C#, F#, Блог компании Издательский дом «Питер», книги, Программирование, Профессиональная литература, функциональное программированиеПро ScalaCheck. Генераторы (Часть 2)
2017-01-21 в 23:48, admin, рубрики: scala, scalacheck, unit-testing, Программирование, Тестирование IT-систем, функциональное программированиеЧасть 2. Генераторы
В вводной статье серии вы, надеюсь уже, успели познакомиться с генераторами. В этом туториале мы закрепим полученные знания, научимся писать собственные (в том числе рекурсивные) генераторы. Хотя он и посвящен генераторам, про свойства мы тоже не забудем. Более того, мы будем их активно использовать, демонстрируя всю мощь механизма генераторов. Рассмотрим механизм предусловий (preconditions). Возможно, более логичным было бы посвятить свойствам вторую статью серии и, возможно, это стало бы правильным решением. Однако, по моим личным наблюдениям, наибольшие трудности вызывают именно генераторы. Свойства мы рассмотрим в следующей статье.
Про хаскелль для самых маленьких на примере задачи с codefights
2017-01-18 в 11:50, admin, рубрики: dude, HALF-LIFE 3, haskell, i want to believe, javascript, python, для самых маленьких, Занимательные задачки, Программирование, Спортивное программирование, уроки программирования, учимся рисовать, функциональное программирование
Если вы интересуетесь функциональным программированием или даже пытаетесь его потихоньку освоить то вам, наверняка, не раз приходилось слышать, что главным отличием от привычного вам императивного подхода является тот факт, что программы строятся от общего к частностям, а не наоборот. Т.е. сначала вы определяетесь с тем, что вы хотите получить, а потом уже — как этого достичь. Такая простая, казалось бы, мысль обычно не дает мозгу покоя и вызывает множественные фрустрации в попытках написать что-нибудь полезное. Если эта история про вас, или вам просто интересно немного научится хаскеллю и ФП продолжайте чтение и я покажу вам как все просто. Статья в стиле «некогда объяснять, пиши».
Про ScalaCheck
2017-01-13 в 10:18, admin, рубрики: scala, scalacheck, unit-testing, Программирование, Тестирование IT-систем, функциональное программированиеПро ScalaCheck
Часть 1. Введение.
ScalaCheck — это комбинáторная библиотека, значительно облегчающая написание модульных тестов на Scala. В ней используется подход property-based тестирования, впервые реализованный в библиотеке QuickCheck для языка Haskell. Существует множество реализаций QuickCheck: есть реализации для Java, C, а так же других языков и платформ. Использование данного подхода позволяет значительно сократить время на разработку тестов.
Эта серия статей во многом похожа на мою предыдущую, посвященную Parboiled, поэтому и структура повествования будет похожей. Я расскажу вам, для чего всё это нужно, затем мы научимся смотреть на мир сквозь призму свойств и генераторов, а потом перейдём к более сложным вещам. Заинтересовало? Прошу под кат.
Классы типов в Scala (с небольшим обзором библиотеки cats)
2017-01-07 в 20:16, admin, рубрики: category theory, functor, higher-kinded types, monad, scala, scala-cats, semigroup, simulacrum, tree rewriting, type class, функциональное программированиеПри слове "полиморфизм" сразу вспоминается объектно-ориентированное программирование, в котором полиморфизм является одним из столпов (Полиморфизм для начинающих). (Причём, по-видимому, более важным, чем другие столпы.) Оказывается, что можно достичь сходного эффекта и другим путём, который в ряде случаев оказывается более предпочтительным. Например, с помощью классов типов можно приписать новые возможности уже существующим типам, у которых нельзя изменить предка, или, используя тип данных с несовместимыми классами, "решить" проблему множественного наследования.
Расширение API от Vk для стикеров на Elixir
2017-01-05 в 10:26, admin, рубрики: api, cowboy, ecto, Elixir, Elixir/Phoenix, poison, Вконтакте API, Занимательные задачки, функциональное программирование
Введение
Во Вк есть наборы стикеров, некоторые из которых даже бесплатные. Но во Вк нет ни какого публичного API для использования данного функционала на сторонних сайта. Задачка состоит в том, чтобы используя функциональный язык Elixir написать расширение над местом хранения стикеров во Вк в виде API.
По моему мнению имена методов, и параметры, которые они принимали были бы следующими. Общим пространством имён для коллекции API методов для работы со стикерами было бы ключевое слово stickers, а сами методы возможно выглядели бы так:
stickers.get — со следующими параметрами: pack_ids, pack_id, fields;
stickers.getById — со следующими параметрами: sticker_ids, sticker_id, fields.
Так как нет возможности создавать или редактировать стикеры, которые есть во Вк, данное API будет иметь только read-only методы. Честно, сложно угадывать, и не хочется подражать разработчикам социальной сети, по этому ограничусь только придумыванием имён методов. И не буду реализовывать API в стиле Вк, хоть это бы и добавило общей идентичности расширению.
Вот такие методы буду реализовывать для работы со стикерами:
Методы для наборов:
GET /packs
GET /packs/{id}
GET /packs/{id}/stickers
Методы для стикеров:
GET /stickers
GET /stickers/{id}
GET /stickers/{id}/pack
Натягиваем ФП на ООП
2017-01-02 в 13:22, admin, рубрики: как сделать жизнь проще, ооп, отладка, Программирование, Семантика, функциональное программирование, метки: как сделать жизнь прощеНекоторое время назад, вернувшись после полугодового отпуска в функциональном мире, назад в ООП, я в который раз наступил на привычные грабли: случайно изменил состояние.
private double fBm(Vector2D v, int y)
{
double result = 0f;
double freq = Frequency;
for (int i = 0; i < Octaves; ++i)
{
result += NoiseFn(permutation, v * freq) * Amplitude;
freq *= Lacunarity;
Amplitude *= Gain; // <-- Вот тут.
}
return result;
}
В ФП нужно особо постараться чтобы получить такой баг, а в некоторый языках невозможно в принципе. Салат из полезной работы и состояния класса не радовал, простор для ошибок даже в этой четверке строк слишком широк. Я стал думать как можно уменьшить площадь этих грабель и вывел следующее:
Может ли компания с десятками тысяч сотрудников быть Agile: опыт МТС
2016-12-23 в 15:47, admin, рубрики: 3g, 4G, Анализ и проектирование систем, Блог компании МТС, интернет, МТС, Программирование, связь, Тестирование IT-систем, функциональное программированиеДиректор центра инноваций МТС Владимир Хренков рассказывает, как сохранить гибкость при крупных размерах.
Нет, это не про идеальный шпагат для тяжеловеса. Речь идет об Agile — методике, позволяющей разрабатывать гибкое ПО, которое бы отвечало всем требованиям современного бизнеса. Но чем крупнее компания, тем она считается неповоротливей. И тем сложнее ей приспособиться к новым техническим веяниям. Однако с недавних пор Agile перестала быть атрибутом исключительно мелких IT-контор и становится все более востребованной у больших игроков. Среди них — крупнейший в России оператор сотовой связи МТС. Владими Хренков расскажет об особенностях перехода на гибкие технологии, а также можно ли им доверить решение проектов государственной важности.

Elixir в биоинформатике
2016-12-21 в 8:26, admin, рубрики: Elixir, Elixir/Phoenix, Erlang/OTP, GenStage, Алгоритмы, биоинформатика, функциональное программирование
В этой статье я расскажу о своей попытке использования библиотеки GenStage, а в частности модуля Flow, для реализации одного из алгоритмов биоинформатики. На протяжении последних двух лет я занимался разработкой комплексной системы хранения и поиска результатов метагеномного анализа (метагеномика) углеводородного сырья. Наверное, для многих это китайская грамота. Фактически такой анализ означает выявление всех типов микроорганизмов, обитающих, к примеру, в залежах нефти. Некоторые из этих микроорганизмов, преимущественно бактерии, способны разъедать стальные трубы и создавать множество других неблагоприятных эффектов.
Читать полностью »


