Pull to refresh
  • by relevance
  • by date
  • by rating

3. Metaprogramming patterns — 20 кю. Замыкания

Ruby
В предыдущем посте мы затронули важнейшую концепцию — замыкание (closure).
Суть этой концепции в том, что в любой блок как бы заключается «весь окружающий мир» так, как он виден в контексте, где блок создается. Правильнее сказать, что в блок заключается не весь окружающий мир (пространство имён), а фиксируется точка зрения на окружающий мир (пространство имён).
Читать дальше →
Total votes 32: ↑27 and ↓5 +22
Views4.9K
Comments 8

Влюбляемся в F#: Доза 0.1: Как установить F#

ProgrammingF#

Дорогие Хабраколлеги!


Благодарю за теплый прием моих заметок по F#. Откровенно говоря, не ожидал такого количества интересных и полезных комментариев! Заранее прошу простить, если я не успеваю отвечать на все — буду стараться.


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


Существует несколько возможностей установить F# (на текущий момент, последняя версия – 1.9.6.2):


Читать дальше →
Total votes 43: ↑35 and ↓8 +27
Views4.4K
Comments 34

Влюбляемся в F#: Доза 1: Дух функционального программирования

ProgrammingF#
Дорогие Хабраколлеги!

Наконец-то я приступаю к некоторому изложению идей функционального программирования вместе с основами языка F#. Сегодня нам нужно будет сделать самое главное – понять основные принципы функционального программирования и проникнуться его духом. Заранее прошу прощения у тех гуру-функциональщиков, кто ждет более содержательных уроков – но мне хотелось начать с начала. Соответственно, для начала, история из жизни:

Когда я был молодым и преподавал программирование на первом курсе факультета Прикладной математики МАИ, один из студентов никак не мог понять, что значит X:=X+1. “Как же так, как X может быть равен X+1?”. Мне пришлось объяснить ему, как такое возможно, и в этот момент в нем умер функциональный программист…


Почему? Давайте разберемся.

Читать дальше →
Total votes 47: ↑32 and ↓15 +17
Views6.7K
Comments 27

Влюбляемся в F#: Доза 2: Строим фрактальное изображение, или множество Мандельброта своими руками

ProgrammingF#

На прошлом уроке мы рассмотрели основные понятия функционального программирования, теперь давайте попробуем применить их на практике. Поскольку функциональное программирование, как вы наверное поняли, идеально подходит для решения математических задач, то рассмотрим именно такую задачу — построение изображения множества Мандельброта, самого известного фрактального множества.


Читать дальше →
Total votes 34: ↑31 and ↓3 +28
Views4.9K
Comments 18

6 способов слияния списка списков

Python
Зашел тут у нас в офисе разговор как наиболее «красиво» и быстро склеить список списков в Питоне. Действительно как?

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

ВАРИАНТ1
Все знают, что элементы списка можно перебирать в цикле и, то что можно добавлять элементы в конец. Это приводит нас к первому варианту решения:
def listmerge1(lstlst):
    all=[]
    for lst in lstlst:
        for el in lst:
            all.append(el)
    return all

Мало того, что функция растянулось аж на 6 строк, так вдобавок она еще и не эффективная.
Попробуем её улучшить в обоих смыслах: скорости и красоты («pythonic way»).
Читать дальше →
Total votes 37: ↑36 and ↓1 +35
Views95.3K
Comments 74

(Зло)употребление C# 4.0 Dynamic – Бестиповое Лямбда-Исчисление, Нумералы Чёрча, и все-все-все… (ч.1)

.NET
Translation

Введение


Воскресное утро, время для еще одного эпизода в серии Безумные Воскресения. Еще раз в одной категории с риском разрыва мозгов, но ведь это как раз то, что нам нравится, не так ли? На этот раз мы рассмотрим бестиповое лямбда-исчисление в C#. Но погодите, разве C# не типизированный язык? Действительно. Но значит ли это, что все, что вы делаете на C# должно быть статически типизировано? Не обязательно: типизация присутствует в языке как инструмент, который вы можете либо не трогать, либо применить. В этом топике мы рассмотрим как новое ключевое слово dynamic из C# 4.0 под несколько странным углом…
Читать дальше →
Total votes 57: ↑41 and ↓16 +25
Views4.7K
Comments 22

Каррирование и частичное применение функции

.NET
Translation
Когда я впервые услышал термин Каррирование, я сразу же представил себе вкусные тайскую и индийскую кухни.  К моему удивлению, я обнаружил, что разговор шел не о прекрасных специях, а о преобразовании функции, принимающей n аргументов в функцию, которая принимает один аргумент и возвращает каррированую функцию, которая принимает n — 1 аргументов. Где бы это могло быть полезным?
Читать дальше →
Total votes 29: ↑21 and ↓8 +13
Views23.4K
Comments 37

Scala. Введение

Programming
Привет хабралюди.

Не так давно я заинтересовался одним из многочисленных ныне языков под JVM — Scala. Причин тому много, основная — всё нарастающее со временем чувство неудобства при работе с cpp-подобными языками. Взгляд мой попеременно падал на Ruby, Groovy, Python, но все они оставляли впечатление инструментов, не совсем подходящих для моего обычного круга рабочих задач (Python-таки хорош, но у нетипизированных языков есть свои ограничения). Scala же, напротив, показалась вполне годным языком. Так как поиск по хабру никаких статей о ней не выловил (было несколько, но мягко говоря не вводных), я решил написать маленький обзор и поделиться им с массами.
По возможности коротко о кажется главном
Total votes 65: ↑56 and ↓9 +47
Views73.8K
Comments 106

Мемоизация в Java

Java
Мемоизация — (Memoization, англ) вариант кеширования, заключающийся в том, что для функции создаётся таблица результатов, и будучи вычисленной при определённых значениях параметров результат заносится в эту таблицу. В дальнейшем результат берётся из данной таблицы.
Эта техника позволяет засчёт использования дополнительной памяти ускорить работу программы.Данный подход очень частно применяется в функциональных языках программирования, однако и в императивных ему так же можно найти применение. В данном топике рассматривается использование мемоизации в языке java приводятся различные примеры мемоизации и в конце производится небольшое сравнение производительности данных методов.
Читать дальше →
Total votes 41: ↑37 and ↓4 +33
Views7K
Comments 48

Притча о шаблонах

JavaScript
 — Здравствуй *с широко развевающейся по лицу улыбкой* дружок.
 — Ваа! *с ярким блеском в широко распахнутых глазах* Тётя Ася приехала!
 — Да, и у меня есть для тебя новая сказка *присела и взяла малыша за руки* хочешь послушать?
 — Конечно! *слегка смутился и отвёл взгляд* Мне тут дядя такие страшные истории рассказывал…
 — Ну, надеюсь моя история тебя не испугает *потрепала его по волосам* Она должна научить тебя мыслить шаблонно.
 — Эээ? *лицо перекосилось от недопонимания* Это как?
 — М… сейчас узнаешь *подмигнула и взяла на ручки* Вот когда тебе нужно вставить переменные в строку — ты как поступишь?
 — Ну… *взял карандаш и чирканул на лежащей рядом бумажке* примерно так:
var query= 'xxx'
var resultCount= 512
var message= 'По запросу <kbd>' + query + '</kbd> найдено страниц: ' + resultCount

 — Ты ничего не забыл? *победоносно подняла голову*
 — Да вроде нет… *уткнулся носом в код, ещё раз внимательно его проверяя*
 — Что, если пользователь введёт… *выдержала многозначительную паузу и добавила*
какого же порева она там добавила?
Total votes 232: ↑157 and ↓75 +82
Views1.7K
Comments 164

The Art Of Programming — Выпуск №52 [ FP ] / Тёмная сторона

Lumber room
Интервью с Alex Ott, пляски вокруг функционального программирования



+ Физика, Linux, LaTeX
+ Путь к ФП
+ Одно из главных достоинств ФП
+ Lisp

Литература по ФП alexott.net/ru/fp/books
Аггрегатор блогов на тему ФП fprog.ru/planet

П.С. www.slideshare.net/j2a/ss-4625844 — слайдкаст Льва Валкина про использование ФП в промышленной разработке, на примере их стартапа — очень интересный рассказ про то, почему отказались от С++, PHP и т.д.
Total votes 31: ↑25 and ↓6 +19
Views557
Comments 25

The Art Of Programming — Выпуск №53 [ FP ] / Clojure

Lumber room
Интервью с Alex Ott, пляски вокруг функционального программирования часть 2

— Сlojure
— Основные виды модифицированного состояния в Сlojure
— Собственные проекты



www.shelfari.com/alexott
alexott.net/ru/clojure/clojure-intro — статья про Clojure
www.slideshare.net/alexott/clojure-margincon-2010 — слайдкаст про Clojure с MarginCon 2010
Total votes 17: ↑14 and ↓3 +11
Views748
Comments 10

Пишем интерпретатор Brainfuck на Mercury

Abnormal programming
Продолжая неделю Brainfuck на хабре и свои эксперименты с Mercury, написал свою версию интерпретатора. Заранее прошу извинить, что еще не представил «вступительную» статью о Mercury. На самом деле, она в процессе написания.
Пока же приведу код решения, который проиллюстрирует заодно несколько возможностей языка Mercury.
Читать дальше →
Total votes 22: ↑15 and ↓7 +8
Views2.1K
Comments 10

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

ProgrammingF#
Sandbox
В результате изучения функционального программирования в моей голове появились некоторые мысли, которыми я хочу с вами поделиться.
Читать дальше →
Total votes 54: ↑48 and ↓6 +42
Views10.5K
Comments 94

Задача Эйнштейна на Mercury

Prolog
Продолжаем неделю задачи Эйнштейна на Хабре. В дополнение к трём представленным решениям
  1. Регулярным языком
  2. Хаскеллем
  3. Прологом

позвольте представить еще одно на Mercury.

Напомним Википедию:

Mercury — язык функционально-логического программирования со строгой типизацией…
Читать дальше →
Total votes 31: ↑22 and ↓9 +13
Views2.6K
Comments 20

Отчеты о ICFPС'11

Self Promo
Вот и закончились очередные 72 часа, в течение которых порядка 300 команд пытались решить задание в рамках ежегодного соревнования от ICFP.

Предварительные результаты (замороженные за 12 часов до окончания), можно посмотреть на сайте организатора, там же можно прочитать и задание этого года.

Итак, список русскоязычных отчетов, найденных на просторах интернета:
Читать дальше →
Total votes 28: ↑26 and ↓2 +24
Views632
Comments 14

Functional thinking: Thinking functionally, Часть 1

Programming
Translation
Давайте на мгновение представим, что Вы — дровосек. И благодаря своему лучшему топору в округе, вы являетесь самым продуктивным дровосеком в лагере. Но однажды появляется некто, начинающий расхваливать достоинства новой парадигмы в рубке леса — бензопилы. В силу убедительности продавца, Вы покупаете бензопилу, но не знаете как она работает. Прилагая неимоверные усилия, пробуете вырвать или раскачать дерево, применяя на практике свою новую парадигму. И быстренько делая вывод, что эта самая новомодная бензопила — ерунда, возвращаетесь к привычному делу — рубить лес топором. А затем кто-то приходит и показывает как заводить бензопилу.

Эта история может показаться Вам знакомой, поставив функциональное программирование на место бензопилы. Проблема в совершенно новой парадигме программирования — не изучение нового языка. Более того, синтакс языка — это всего лишь детали. Вся тонкость же — научиться мыслить иначе. Это то, почему я оказался тут — заводящий бензопилы и “функциональный” программист.

Итак, добро пожаловать в Functional thinking. Эта серия исследует предмет функционального программирования, но не несет исключительной направленности описать функциональные языки. Как я покажу дальше, написание кода в функциональном стиле касается дизайна, компромиссов, разных повторно используемых кусков кода и служит основой для иных догадок. Насколько это окажется возможным, я попытаюсь показать концепции функционального программирования в Java (или близких к Java языках) и перейду к другим языкам, чтобы осветить возможности, отсутствующие на данный момент в Java. Я не полезу сразу в дебри, рассказывая о довольно необычных вещах, таких как монады (monads). Напротив, я постепенно проведу Вас через новый путь мышления.

Эта и пара следующих частей выступят в роли быстрой экскурсии по предметам, связанным с функциональным программированием, включая базовые концепции. Некоторые из этих концепций в дальнейшем будут рассмотрены более детально в то время, как я буду постепенно расширять контекст применения на протяжении всей серии. В качестве отправной точки нашей экскурсии я покажу Вам две разные реализации решения задачи. Одна написана в императивном стиле и другая — с некоторыми функциональными особенностями.
Читать дальше →
Total votes 74: ↑66 and ↓8 +58
Views14.3K
Comments 102

Functional thinking: Thinking functionally, Часть 2

Programming
Translation

В первой части серии я начал обсуждение некоторых особенностей функционального программирования, показывая проявления этих идей в Java и других, более функциональных языках. В этой статье я продолжу свой обзор, обращая внимание на функции — объекты первого класса, оптимизации и замыкания. Но основная тема этой статьи — контроль: когда вы его хотите, когда он вам необходим и когда надо просто забить.
Читать дальше →
Total votes 36: ↑36 and ↓0 +36
Views5.2K
Comments 7

Макросы в Scala, Евгений Бурмако. Скринкаст, слайды и фото со scalaby#6

Scala

На 6-ой встрече коммьюнити #scalaby выступал Евгений Бурмако — докторант EPFL, и член команды Мартина Одерски, занимающейся разработкой Scala. Темой презенатции был «Проект Кеплер» — пропозал по добавлению макросов в Scala, над которым Евгений работает в течение последнего месяца.

Фото и скринкаст под катом
Total votes 15: ↑14 and ↓1 +13
Views2.8K
Comments 2

Functional thinking: Thinking functionally, Part 3

Programming
Translation
В первой и второй частях “Функционального мышления” я рассмотрел некоторые вопросы функционального программирования а также то, как они относятся к Java и связанным с ней языкам. Эта часть продолжит мой обзор, в ней я покажу версию классификатора чисел из предыдущих частей на языке Scala и обсужу некоторые теоретические вопросы, такие как карринг, частичное применение и рекурсия.

Читать дальше →
Total votes 21: ↑20 and ↓1 +19
Views4.9K
Comments 5