Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
site:rsdn.ru www.defmacro.org/ramblings/fp.htmlsite:rsdn.ru "defmacro.org" нашёл ссылки на другие статьи автора, но на эту — нет.А копирование памяти — операция довольно быстрая.
Кажется я понял как сформулировать то, что меня напрягает в ФП: в ФП нет привычных структур данных, привычных в том смысле, что мы можем их схематично нарисовать на бумаге, и их хранение в памяти компьютера будет примерно таким же, как наша рукописная схема.
Пример: как в ФП будет хранится матрица целых чисел? Будет ли это непрерывный массив ячеек памяти длинных n^2? Если да, то на сколько эффективна будет работа с ним, когда нам потребуется изменять только несколько ячеек?
Лучше я реализую все алгоритмы с учетом функционирования аппаратной части и привяжу их к структурам данных, это ООП.
String reverse(String arg) {
if(arg.length == 0) {
return arg;
}
else {
return reverse(arg.substring(1, arg.length)) + arg.substring(0, 1);
}
}
Unit тестирование
Отладка
Многопоточность
Развёртывание по горячему
Доказательные вычисления и оптимизация
Функции высшего порядка
Ленивые вычисления
Pattern matching
Замыкания
БД и интерфейс в юнит-тестах? Что-что, простите?
SiCP в руки и учиться декомпозиции задачи.
Корректнее тогда уж «интеграционные». Про каковые в статье ни слова.
А там где есть I/O, у вас есть соответствующая монада. Хотя я придерживаюсь мысли, что идеальный подход — гибридный.
Функции высшего порядка
Ленивые вычисления
Pattern matching
Замыкания
Развёртывание по горячему
Что-то мешает преобразовать? Каррирование на что?
функции высших порядков
декларативный стиль программирования
в эрланге примерно так и происходит. Только это все инкапсулировано от разработчика и происходит «по волшебству».
Map<String, Integer> someMap = new HashMap<String, Integer>();
Map<String, Integer> someMap = Collections.newMap();
do
a <- someFoo
do
a <- return someFoo
SiCP читали, декомпозицию умеем, монаду IO знаем. И чо?
Это всё можно прекрасно делать с императивными языками
Этим давно уже никого не удивишь
А что мешает делать PM в императивных языках?
Этим сейчас тоже никого не удивишь
Мне кажется, или мы обсуждаем как это всё писать на ФЯПе?
А главное, чем ближе к железу, тем меньше там алгоритмов высокого уровня и больше именно таких «прочитать, поспать, записать, вернуть, изменить бит» и т.д.
Ленивые языки позволяют создавать бесконечные структуры данных, создание которых в строгих языках гораздо сложнее [пер. — только не в Python].
Функциональное программирование для всех