В данной статье используется среда разработки DrRacket.
Для начала рассмотрим связь конечного автомата и игрового процесса.
Объект управления в игре можно представить в виде конечного автомата.
Рассмотрим программу, моделирующую светофор.
Этот пример был описан в предыдущей статье.
Переходом в другое устойчивое состояние является переключение сигнала светофора.
Диаграмму состояний можно изобразить в следующем виде.

Читать полностью »
Рубрика «функциональное программирование» - 25
Игры на Scheme(Lisp) в среде DrRacket
2017-06-18 в 15:47, admin, рубрики: drRacket, HtDP, htdw, Scheme, Программирование, создание игр, функциональное программированиеНе используйте return в Scala
2017-06-18 в 10:25, admin, рубрики: GOTO, return, scala, Программирование, функциональное программированиеСегодня я бы хотел представить вашему вниманию перевод небольшой статьи Роберта Норриса, возможно, знакомого вам под никнеймом tpolecat. Этот человек достаточно хорошо известен в Scala-сообществе как автор бибилиотеки doobie и участник проекта cats.
В своей публикации Роберт рассказывает о том, что использование return может негативно повлиять на семантику вашего кода, а также проливает свет на пару интересных особенностей реализации return в Scala. Оригинал статьи вы можете найти в блоге автора по ссылке.
Функциональное программирование в Scala — нужно ли оно вообще?
2017-06-18 в 6:32, admin, рубрики: functional programming, scala, Программирование, функциональное программированиеВ этой статье я хотел бы на примере простого чисто функционального кода показать, как он видоизменяется при добавлении требований к тестируемости и расширяемости, и что же получается в итоге. Надеюсь, это будет интересно всем, кто интересуется дизайном ПО и функциональным дизайном в частности. Также желательно немного понимать язык Scala, ну или уметь быстро разбираться.
Читать полностью »
Советы начинающему скалисту (Часть 2)
2017-06-13 в 12:56, admin, рубрики: scala, начинающему, начинающим, Программирование, стиль кодирования, функциональное программирование, чистый кодЧасть 2. Обо всем и ни о чем
Сегодня мы обсудим ряд скалических идиом, которые не поместились в первую часть статьи. Мы рассмотрим вопросы интероперации языка с Java и, главное, неправильное использование объектно-ориентированных особенностей Scala.
Идиоматичный Redux: Дао Redux’а, Часть 1 — Реализация и Замысел
2017-06-11 в 18:41, admin, рубрики: Dan Abramov, immutability, javascript, mvc, open source, ReactJS, redux, Разработка веб-сайтов, функциональное программированиеМысли о том, какие требования выдвигает Redux, как задумано использование Redux и что возможно с Redux.
Введение
Я потратил много времени, обсуждая онлайн паттерны использования Redux, была ли это помощь тем, кто изучает Redux в Reactiflux каналах, дискуссии о возможных изменениях в API библиотеки Redux на Github'е, или обсуждение различных аспектов Redux'а в комментариях к тредам на Reddit'е или HN (HackerNews). С течением времени, я выработал свое собственное мнение о том, что представляет собой хороший, идиоматичный Redux код, и я хотел бы поделиться некоторыми из этих мыслей. Несмотря на мой статус мейнтейнера Redux'а, это всего лишь мнения, но я предпочитаю думать, что они являются достаточно хорошими подходами :)
Redux, в своей сути, невероятно простой паттерн. Он сохраняет значение, выполняет одну функцию для обновления значения когда это необходимо, и уведомляет любых подписчиков о том, что что-то изменилось.
Несмотря на эту простоту, или, возможно, вследствие ее, существует широкий спектр походов, мнений и взглядов о том, как использовать Redux. Многие из этих подходов широко расходятся с концепциями и примерами из документации.
В то же время, продолжаются жалобы на то, как Redux «заставляет» вас делать вещи определенными способами. Многие из этих жалоб на самом деле включают концепции связанные с тем, как Redux обычно используется, а не фактическими ограничениями наложенными самой библиотекой Redux. (Например, только в одном недавнем HN треде я видел жалобы: «слишком много шаблонного кода», «константы action'ов и action creator'ы не нужны», «я вынужден редактировать слишком много файлов чтобы добавить одну фичу», «почему я должен переключаться между файлами чтобы добраться до своей логики?», «термины и названия слишком сложны для изучения или запутанны», и слишком много других.)
Избегание ада с помощью монад
2017-05-23 в 6:18, admin, рубрики: haskell, monads, Программирование, функциональное программирование
Мы как программисты иногда попадаем в "программистский ад", место где наши обычные абстракции не справляются с решением ряда повторяющихся проблем.
В данной статье будут рассмотрены такие проблемы, синтаксические конструкции используемые для их решения и наконец как эти проблемы могут быть решены единообразно с помощью монад.
Ад проверки на null
Данная проблема возникает когда несколько частичных функций (функции которые могут не вернуть значение) нужно выполнить последовательно.
Такие функции обычно приводят в глубоко вложенному и сложно читаемому коду с чрезмерным количеством синтаксического шума.
var a = getData();
if (a != null) {
var b = getMoreData(a);
if (b != null) {
var c = getMoreData(b);
if (c != null) {
var d = getEvenMoreData(a, c)
if (d != null) {
print(d);
}
}
}
}
От зависимых типов к гомотопической теории типов на Scala + Shapeless + ProvingGround
2017-05-22 в 9:11, admin, рубрики: dependent type, homotopy type theory, scala, type level programming, type theory, зависимые типы, математика, скала, типы данных, функциональное программированиеВсем привет. Хочу поделиться своим опытом использования библиотеки ProvingGround, написанной на Скале с использованием Shapeless. У библиотеки имеется документация, правда, не очень обширная. Автор библиотеки — Сиддхартха Гаджил из Indian Institute of Science. Библиотека экспериментальная. Сам Сиддхартха говорит, что это пока не библиотека, а «work in progress». Глобальная цель библиотеки — брать статью живого математика, парсить текст, переводить естественный язык с формулами в формальные доказательства, которые мог бы чекать компилятор. Понятно, что до этого еще очень далеко. Пока что в библиотеке можно работать с зависимыми типами и основами гомотопической теории типов (HoTT), (полу-) автоматически доказывать теоремы.
Читать полностью »
Функциональный Rust: Готовим говядину
2017-05-22 в 8:00, admin, рубрики: Rust, архитектура, критика, ненормальное программирование, ооп, функциональное программирование, эзотерические языкиДобавление to_string упрощает разработку и дебаг кода на Elixir’е
2017-05-17 в 10:08, admin, рубрики: debug elixir, elixir debugging, Elixir/Phoenix, вывод данных в эликсире, Программирование, Разработка веб-сайтов, Совершенный код, упрощение жизни, функциональное программирование, метки: debug elixir, elixir debugging, вывод данных в эликсире, упрощение жизниПроверим на примере: пишем сервис с аэропортами и направлениями.
defmodule Airport do
defstruct [:id, :name]
end
defmodule Direction do
defstruct [:origin, :destination]
def example do
madrid = %Airport{id: "MAD", name: "Madrid"}
riga = %Airport{id: "RIX", name: "Riga"}
%Direction{origin: riga, destination: madrid}
end
end
Пока что всё в порядке. Отлично, съели печеньку, смотрим, что дальше в джире. Список самых популярных направлений?
Как проектировать программы (HtDP)
2017-05-16 в 16:24, admin, рубрики: drRacket, HtDP, Scheme, Программирование, функциональное программированиеВ учебнике HtDP, посвященному программированию на языке Scheme (Lisp) в среде drRacket, особое внимание уделяется вопросам, касающимся работы с изображениями и анимацией. Поводом написать данную статью послужили мои попытки разобрать примеры, изложенные в этом учебнике.
Читать полностью »


