Доброго времени суток всем хабражителям
Перед вами статья, посвященная довольно известному, но не сильно популярному языку Haskell. В ней мне хочется показать пример решения простой турнирной задачи на языке Haskell. Надеюсь, что эта статья поможет начинающим программистам на Хаскеле сделать первые шаги к написанию полноценной программы.
Рубрика «функциональное программирование» - 50
Решение турнирных задач на языке Haskell
2013-01-23 в 9:26, admin, рубрики: codeforces, functional programming, haskell, tutorial, Программирование, функциональное программирование, хаскель, метки: codeforces, functional programming, haskell, tutorial, функциональное программирование, хаскельИграем в Haskell
2013-01-13 в 18:42, admin, рубрики: functional programming, haskell, Программирование, функциональное программирование, хаскель
Я замечательно провел время изучая Haskell последние месяцы, и мне кажется, что сделать первые шаги в этом занятии сложнее, чем это могло бы быть на самом деле. Мне повезло работать в нужное время и в нужном месте, и в Facebook я прошел курс по Haskell от Bryan O'Sullivan, но Вы определенно сможете влиться в тему и без чужой помощи. Для этого можно поиграть в Haskell на сайте Try Haskell, а в конечном счете установить себе GHC.
Читать полностью »
Изменение кода программы во время ее выполнения на примере Common Lisp
2013-01-08 в 14:19, admin, рубрики: искусственный интеллект, Песочница, Программирование, функциональное программирование, метки: искусственный интеллект, Лисп, Программирование, функциональное программирование
Введение
По моему скромному мнению, Lisp — жемчужина среди языков функционального программирования. Несмотря на то, что это один из первых в истории (1958 год) высокоуровневых языков, он по сей день не перестает удивлять. Мне кажется, он настолько обогнал свое время, что его час еще только готовится прийти.
Так давайте попытаемся написать программу, которую проблематично будет создать на других языках. Как следует из названия статьи, эта программа будет редактировать собственный код по мере своего выполнения. Для ее создания я использую Common Lisp, а точнее его интерпретатор SBCL.
Читать полностью »
Clojure в Белорусском ГУ
2013-01-05 в 11:09, admin, рубрики: clojure, преподавание, Учебный процесс в IT, факультатив, функциональное программирование, метки: clojure, преподавание, факультатив, функциональное программирование
В этом семестре (осенью 2012) был проведён факультатив по языку Clojure в Белорусском ГУ. В посте будет описан факультатив: причины, программа, задания, результаты, впечатления.
Читать полностью »
Почему язык Haskell так непопулярен
2012-12-24 в 3:33, admin, рубрики: haskell, Программирование, функциональное программирование, метки: haskellВ статье представлено моё видение на эволюцию функциональной парадигмы программирования и процессы популяризации функциональных языков программирования на примере языка Haskell. Изучаются причины общей низкой популярности как функционального программирования, так и одного из его «флагманов». Приводятся факторы, которые не позволят языку программирования Haskell стать таким же широко используемым языком, как Java, C++, PHP и др.
Функциональное мышление: Трансформации и оптимизации
2012-12-07 в 15:44, admin, рубрики: clojure, functional programming, groovy, java, scala, функциональное программирование Нил Форд, Архитектор ПО, ThoughWorks Inc.
16 октября 2012
перевод статьи Functional thinking: Transformations and optimizations
Функциональное программирование уходит корнями одновременно в математику и информатику, обе дисциплины имеют свою трактовку терминологии. Разработчики языков программирования и фреймворков реализуют свои удобные наименования, и лишь затем обнаруживают, что данные парадигмы уже имеют название. Обучение функциональным парадигмам довольно тяжело так как нет четкого согласования терминологии.
В прошлой части, я взял проблему классификации простых чисел и реализовал решения на нескольких функциональных языках поверх JVM и двух функциональных фреймворках. Продолжая этут ему, в этой части я буду оптимизировать предыдущий алгоритм несколькими способами, раскрывая последующие изменения в различных языках. Эта часть, как и прошлая, иллюстрирует различия в терминологии и наличие возможностей в инструментах и языках. В частности, я исследую map, filter и memoize для этих примеров.
Читать полностью »
Встреча FProg 2012-12 в Петербурге
2012-12-07 в 9:21, admin, рубрики: clojure, fprog, ghc, haskell, kotlin, Блог компании JetBrains, встреча, функциональное программирование, метки: clojure, fprog, ghc, haskell, kotlin, встреча, функциональное программирование
12 декабря 2012 года в 19:00 в петербургском офисе JetBrains пройдёт встреча по функциональному программированию FProg. В программе встречи представлены доклады о языках Haskell, Kotlin и Clojure:
- Илья Сергей. Статический анализ и оптимизация кода в GHC
- Андрей Бреслав. Функции и данные в Kotlin
- Дмитрий Грошев. Reducers в Clojure
Обязательная запись на встречу для доступа в офис осуществляется на странице встречи через Twitter-аккаунт.
Читать полностью »
Функциональное мышление: Тонны трансформаций
2012-12-06 в 19:55, admin, рубрики: clojure, functional programming, groovy, java, jruby, scala, функциональное программирование Нил Форд, Архитектор ПО, ThoughWorks Inc.
25 сентября 2012
перевод статьи Functional thinking: Tons of transformations
В функциональных языках программирования подходы к повторному использованию кода существенно отличаются от ООП языков, эту тему я исследовал в статье Связывание и композиция, часть 2. ООП языки стремятся иметь множество структур данных с различными операциями, в то время как функциональные языки используют несколько с небольшим количеством операций. ООП языки способствуют созданию класс-специфичных методов (class-spesific) и вы можете использовать повторно повторяющиеся части. Функциональные языки помогают достигнуть повторное использование путем поощрения применения общих преобразований в структурах данных, с помощью функций высшего порядка можно преобразовывать операции для частных случаев.
Одни и те же структуры данных и операции встречаются в функциональных языках, многие фреймворки предоставляют поддержку функционального программирования в Java, но наименования часто отличаются. Путаница в наименованиях усложняет перевод знаний из одного языка в другой, если даже используются одни и те же концепции.
Основная цель этой части поспособствовать пониманию этой трансляции. Я возьму простые проблемы, которые требуют определиния и итерации, реализую решение на 5 различных языках (Java, Groovy, Clojure, JRuby и Scala) и двух функциональных фреймворках (Functional Java и Totally Lazy) для Java. Эти реализации одинаковы, однако детали отличаются от языка к языку.
Читать полностью »
Функциональное мышление: Переосмысление диспетчеризации
2012-12-04 в 0:00, admin, рубрики: clojure, functional programming, groovy, java, scala, функциональное программирование Нил Форд, Архитектор ПО, ThoughWorks Inc.
21 августа 2012
перевод статьи Functional thinking: Rethinking dispatch
В прошлой части, я исследовал использование Java дженериков для имитации поиска-по-образцу как в Scala, который позволяет писать понятные, читаемые условные выражения. Поиск-по-образцу в Scala один из примеров альтернативного механизма диспетчеризации, который я использую как термин в широком смысле для описания возможностей языка динамически определять поведение. Эта часть более подробно рассматривает механизмы диспетчеризации методов в различных функциональных JVM языках предоставляя больше понимания и гибкости в сравнении со средствами Java.
(прим. перевод.: dispatch method mechanism, перевод диспетчеризация методов очень часто используется, однако попадается литература по Java, которая переводит термин как назначение методов, однако я использую первый)
Функциональное мышление: Either деревья и сопоставление-по-образцу
2012-12-02 в 19:01, admin, рубрики: functional programming, java, scala, функциональное программирование Нил Форд, Архитектор ПО, ThoughWorks Inc.
10 Июля 2012
перевод статьи Functional thinking: Either trees and pattern matching
В прошлой части я представил распространенную абстракцию в мире функционального программирования: Either. В этой части, я продолжу исследование Either, используя его для построения древовидных структур данных — которые в свою очередь, позволят мне имитировать сопоставление-по-образцу(pattern-matching), характерное в Scala, для построения методов обхода.
Читать полностью »