Обновить
4K+

F# *

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

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

Реализация стека, очереди и дека на языке F# в функциональном стиле

Время на прочтение5 мин
Охват и читатели5.5K
Недавно я познакомился с концепцией функционального программирования. Возможно, в этой статье я изобретаю велосипед, однако я считаю, что эти действия являются весьма полезными для обучения, а также для более чёткого понимания функционального программирования.

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

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

Детерминированность функции означает то, что она выдаёт одинаковый результат для одинакового набора аргументов.
Побочными эффектами функций являются изменение глобальных переменных, обработка исключений, операции ввода-вывода, и т. д.

Стек


Прежде всего начнём со стека. В F# основным типом данных для хранения нескольких однотипных элементов является не массив, а список. Если перед нами стоит задача превратить список в стек, то какие функции нам понадобятся?

Во-первых, нам необходима функция для добавления элемента в вершину стека. Эта функция традиционно называется push. Однако эта функция нас особо не интересует, поскольку она очень просто реализуется:

let push stk el = el :: stk


Довольно простая функция, которая имеет тип 'a list -> 'a -> 'a list, однако не все дальнейшие функции позволят обращаться с собой таким простым способом.

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

Читать дальше →

Разработка приложения на Android с помощью Xamarin и F#

Время на прочтение10 мин
Охват и читатели17K
image

Привет!

Недавно Xamarin объявил конкурс на разработку мобильного приложения на функциональном языке программирования F#.
Это было связано с выходом Xamarin 3 с полной поддержкой F#. Я решил отвлечься от повседневных задач и попробовать поучаствовать, тем более что я давно смотрю на F#, но шансов познакомиться с ним подробнее у меня не было. Для участия в соревновании я решил разработать приложение идея которого была предложена кем-то в процессе обсуждения внезапного взлета мобильного приложения Yo. Вот цитата:
Идея для стартапа, рабочее название «ты где?».

Смысл прост, девушка устанавливает приложение, указывает в нем номер своего молодого человека и после этого появляется большая гнопка отправки сообщения «ты где?» #startup #idea

Почему бы и нет?

Примечание
Я писал этот пост параллельно работая над приложением. Поэтому он большой и местами не очень логичный.

Читать дальше →

Неизменяемая очередь на F#

Время на прочтение4 мин
Охват и читатели7.9K

Введение


Прочитав недавно статью про список на Haskell, решил тоже немного рассказать о реализации базовых структур на ФЯП (F#). Статья не несёт практической ценности, поскольку готовых реализаций полно в интернете. Цель статьи — рассказать о том, как можно реализовать неизменяемую очередь на F# и как она работает.
Для начала немного терминологии.
F# — это язык программирования из семейства .NET, который, помимо объектно-ориентированного и императивного подходов, реализует функциональный подход в программировании.
Неизменяемые объекты – это такие объекты, которые будучи созданными один раз, в дальнейшем не могут быть изменены. Например, в C# есть такой тип данных, как string, экземпляры которого являются неизменяемыми. Добавляя символ в строку, вы получаете новую строку и имеете неизменной старую. Подробнее тут.
Читать дальше →

Жизнь Конвея на F# + OpenGL

Время на прочтение5 мин
Охват и читатели6.4K

Почему F#?



Просто потому что он мне нравится. Решив пару десятков задач на projecteuler я решил найти более практическое применение знаниям и написать нечто не сложное, но осязаемое.

Кому интересно — добро пожаловать под кат.
Читать дальше →

Как я подружил Unity3D и F#

Время на прочтение30 мин
Охват и читатели21K

В последнее время я стал все больше и больше интересоваться функциональным программированием, и при выборе языка предо мною пал выбор среди двух очень понравившихся мне языков — Haskell и F#.
В F# меня соблазнило то, что его можно компилировать в MSIL сборки, что обеспечивает возможность использования библиотек классов F# в других языках Microsoft .Net, а также то, что он и сам может их использовать. Ко всему прочему, я ещё и начинающий разработчик Unity3D, и мне в голову пришла мысль: если компилируется в MSIL, то может можно использовать F# скрипты в Unity? Гугление дало ответ: по-человечески нельзя. Можно создать библиотеку классов, поставить в проекте ссылки на библиотеку UnityEngine.dll, компилировать и импортировать как ассет, после чего добавлять компоненты Mono-behaviour напрямую из библиотеки, но это не слишком удобно, согласитесь. Однако, пройдя гугл, Reflection и справку по Unity, мне все таки удалось приблизить(но не повторить в точности) работу с F# скриптами внутри редактора к тому виду, в котором производится работа со скриптами на встроенных языках. Подробности — под хабракатом.


Показать подробно

F# Хвостовая рекурсия. Подводные грабли. Часть 1

Время на прочтение4 мин
Охват и читатели13K

Винни Пух: Ой, что это случилось с твоим хвостом?
Иа: А что с ним могло случится?
Винни Пух: Его нет.
Иа: Ты не ошибся?
Винни Пух: Хвост или есть или нет совсем! Тут нельзя ошибиться.
Иа: А что же тогда там есть?
Винни Пух: Ничего!


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

Все дело было в хвостовой рекурсии, вернее, как оказалось в ее отсутствии в неожиданных местах.
Читать дальше →

Machete — скриптовая среда для .Net

Время на прочтение1 мин
Охват и читатели1.3K
В попытке побороть моё стремление к совершенству, я решил открыть исходники моего долгосрочного проекта Machete для всеобщего просмотра. Machete — это мой собственный диалект стандарта ECMAScript 5 или, как его чаще называют, JavaScript.
Читать дальше →

10 «однострочников», которые произведут впечатление на ваших друзей

Время на прочтение13 мин
Охват и читатели43K
За последнюю неделю появилось несколько топиков с названием «10 однострочников на <MY_LANGUAGE>, которые произведут впечатление на ваших друзей», которые содержат однострочное решение нескольких простых задач, демонстрирующее достоинства и «крутость» любимого языка программирования автора. Я решил перевести их и для сравнения собрать в одном топике. Вся волна началась (вроде как) со Scala.
Итак, поехали!
Читать дальше →

Паттерны Command и Strategy с точки зрения функционального программирования

Время на прочтение9 мин
Охват и читатели15K
В результате изучения функционального программирования в моей голове появились некоторые мысли, которыми я хочу с вами поделиться.
Читать дальше →

Введение в F#, the blue pill

Время на прочтение5 мин
Охват и читатели12K
[Предыдущий пост]

Введение


image
Вот и ожидаемое, или не очень, продолжение. Сегодня мы проглотим синюю пилюлю, гордо олицетворяющую FP (functional programming), и погрузимся в функциональную часть F# еще глубже. Поговорим о функциях, рекурсии, pattern matching'е и еще о нескольких интересных вещах. Интересно? Тогда глотаем таблетку и начинаем погружение.

Читать дальше →

Введение в F#, или полезное о бесполезном

Время на прочтение3 мин
Охват и читатели25K

Вступление



А зачем оно мне?

image

А почему бы и нет? К примеру, для общего развития, или просто для интереса, а впоследствии, может быть, для того, чтобы убедиться, что F# — не просто язык для ознакомления.
Читать дальше →

Вдогонку Visual Studio 2010 SP1, новые инструменты для разработчиков

Время на прочтение2 мин
Охват и читатели9K

image



Как вы, наверняка, знаете недавно был выпущен пакет обновления для Visual Studio 2010. Спустя некоторое время стали появляться дополнительные инструменты, про которые стоит рассказать отдельно.


Читать дальше →

F#: Во что превращается ваш код после компиляции

Время на прочтение4 мин
Охват и читатели2.5K
Язык F# появился в стандартной поставке VisualStudio совсем недавно, а именно с версии 2010 (на данный момент самой что ни на есть актуальной). Естественно, и все это прекрасно знают, язык функционирует на основе CLR — весь ваш код будет скомпилирован в MS IL как и любой другой язык .NET семейства.

Давайте на примере часто используемой и полезной техники «меморизация» посмотрим во что превращает ваш код компилятор. Для наглядности я буду писать сам код на F# и декомпилировать его в C#.
Читать дальше →

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

tryfsharp.org — Microsoft выпустил бета версию сайта для онлайн изучения F#

Время на прочтение1 мин
Охват и читатели1.6K
На сайте есть написанный на Silverlight редактор кода c подсветкой синтаксиса и небольшой учебник по F#



Читать дальше →

Книга Криса Смита «Программирование на языке F#»

Время на прочтение2 мин
Охват и читатели5.1K
image

Любая методология разработки, инструмент, технология или язык программирования привлекает к себе внимание по разным причинам. Это может быть нечто инновационное и тогда по прошествию десятка или двух лет (!), до него таки дотянутся руки всего остального компьютерного сообщества. Так было практически со всеми идеями, которым пришлось пройти длительный путь от конференций гиков до признания широкой общественностью. Другим способом ворваться в «мейнстрим» является поддержка уже известного вендора, например такого, как компания … Майкрософт. Большинство людей инерционны и не будут вкладывать свои силы в «нонейм» инструменты, пока не удостоверятся, что их капиталовложение будет востребовано. Если же инструментом занимается подобный вендор, то риск изучить что-то, что не пригодится в будущем, очень не велик.
Читать дальше →

Опубликованы исходные коды F# 2.0 под лицензией Apache 2.0

Время на прочтение1 мин
Охват и читатели948

Компания Microsoft опубликовала сегодня исходные коды компилятора F# 2.0 и набора других инструментов для этого языка под названием F# PowerPack.


Читать дальше →

Что нам готовит PDC10?

Время на прочтение2 мин
Охват и читатели629

image



PDC10 — крупнейшая конференция Microsoft начнется уже через неделю 28 октября. Самое время строить догадки и предположения о том, что нового может представить Microsoft для разработчиков.



Пищу для домыслов может дать недавнее обновление программы конференции на сайте http://player.microsoftpdc.com/. В ней появились следующие интересные позиции:



image  image



Не остается сомнений, что на PDC расскажут про следующие версии C#, Visual Basic и F#. Пока не ясно будет ли обновление языков проходить вместе с обновлением самой платформы .NET. Я склонен считать, что обновления CLR не будет, нововведения в языки будут введены под индексом .NET 4.1/4.5, но не 5.0.

Читать дальше →

[Перевод] Я все еще не просек F#

Время на прочтение2 мин
Охват и читатели2.3K
Я думаю, что Microsoft пытается продать нам F# как что-то новое и крутое, но у меня серьезные проблемы с пониманием приемуществ F# перед C#.

Читать дальше →

Асинхронное программирование — цепочки вызовов

Время на прочтение6 мин
Охват и читатели5.7K

Когда в коде фигурирует пара вызовов BeginXxx()/EndXxx(), это приемлимо. Но что если алгоритм требует несколько таких вызовов подряд, то количество методов (или анонимных делегатов) преумножится и код станет менее читабельным. К счастью, эта проблема решена как в F# так и в C#.



Читать дальше →