Определение точки функционального программирования

изменить порт 8888 -> 8080

ПЕРЕЙТИ в RUN -> Редактировать конфигурации и изменить порт с 8888 на 8080 Ваша ячейка юпитера должна быть хорошо выполнена.

20
задан sumek 18 October 2008 в 11:19
поделиться

8 ответов

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

Это было закреплено для меня, когда я начал играть с Erlang, языком с неперезаписываемым стеком. Однако нужно разъяснить, что существует различие между парадигмой программирования и языком программирования . Языки, которые обычно упоминаются как функциональные, обеспечивают много функций, которые поощряют или осуществляют функциональную парадигму (например, Erlang с, он - неперезаписываемый стек, функции высшего порядка, закрытия, и т.д.). Однако парадигма функционального программирования может быть применена на многих языках (с различными степенями боли).

20
ответ дан 29 November 2019 в 23:20
поделиться

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

Ниже функции, которые приходят на ум. Большинство людей использует термин "функциональное программирование" для обращения к некоторому подмножеству тех функций (наиболее распространенные / важные, являющиеся "чистотой" и "функциями высшего порядка").

функции FP:

  • Чистота (иначе неизменность , сторонясь побочных эффектов, ссылочная прозрачность )
  • функции Высшего порядка (например, передача функция в качестве параметра, возвратите его в результате, определяет анонимную функцию на лету как лямбда-выражение)
  • Лень (иначе нестрогая оценка , самый полезный/применимый, когда вместе с чистотой)
  • Алгебраические типы данных и сопоставление с образцом
  • Закрытия
  • Приправляющий карри / частичное приложение
  • Параметрический полиморфизм (иначе дженерики )
  • Рекурсия (более видный в результате чистоты)
  • Программирование с выражениями, а не операторами (снова, от чистоты)
  • ...

, Чем больше функций из вышеупомянутого списка Вы используете, тем более вероятно кто-то маркирует то, что Вы делаете "функциональное программирование" (и первые две функции - чистота и функции высшего порядка - вероятно, стоят большинство дополнительных бонусных очков к Вашему "счету FP").

7
ответ дан 29 November 2019 в 23:20
поделиться

От Википедия :

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

Используя функциональный подход приносит следующую пользу:

  • Параллельное программирование очень легче на функциональных языках.
  • Функции в FP никогда не могут вызывать побочные эффекты - это делает поблочное тестирование намного легче.
  • Горячее Развертывание Кода в продуктивных средах намного легче.
  • Функциональные языки могут быть обоснованы о математически.
  • Отложенные вычисления обеспечивают потенциал для оптимизации производительности.
  • более выразительный - закрытия, сопоставление с образцом, совершенствовались, системы типов и т.д. позволяют программистам тому, 'скажите, что они имеют в виду' с большей готовностью.
  • Краткость - для некоторых классов программы функциональное решение значительно более кратко.

существует большая статья с большим количеством детали здесь .

8
ответ дан 29 November 2019 в 23:20
поделиться

Много определений до сих пор подчеркнуло чистота , но существует много языков, которые считают функциональными, которые нисколько не чисты (например, ML, Схема). Я думаю ключевые свойства, которые делают язык "функциональным":

  1. функции Высшего порядка. Функции являются встроенным типом данных, не отличающимся от целых чисел и булевских переменных. Анонимные функции легко создать и идиоматичный (например, лямбды).
  2. Все - выражение. На императивных языках различие сделано между операторами, которые видоизменяют состояние и влияют на поток управления и выражения, которые приводят к значениям. На функциональных языках (даже нечистые функциональные языки), вычисление выражения является основной единицей выполнения.

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

12
ответ дан 29 November 2019 в 23:20
поделиться

Я должен добавить, что функциональное программирование склоняется к также абстрактным управляющим структурам Вашей программы, а также домена - например, Вы больше не делаете 'для цикла' в некотором списке вещей, но Вы 'отображаете' его с некоторой функцией для создания вывода.

я думаю, что функциональное программирование является настроением, а также определением, данным выше.

3
ответ дан 29 November 2019 в 23:20
поделиться

Это похоже на рисование изображения при помощи векторов вместо битовых массивов - говорят живописцу, как изменить изображение вместо того, на что изображение похоже на каждом шаге.

Это - приложение функций в противоположность изменению состояния.

-1
ответ дан 29 November 2019 в 23:20
поделиться

Я думаю, что у John Stauffer главным образом есть определение. Я также добавил бы, что необходимо смочь раздать функции. По существу Вам нужны высокого уровня функции, подразумевая, что можно раздать функции легко (хотя передающие блоки достаточно хороши).

, Например, очень популярный функциональный вызов является картой. Это в основном эквивалентно

list is some list of items
OutList is some empty list
foreach item in list
     OutList.append(function(item))
return OutList

так, чтобы код был выражен как карта (функция, список). Революционное понятие - то, что функция является функцией. JavaScript является ярким примером языка с высокого уровня функциями. В основном функции можно рассматривать как переменная и передать в функции или возвратить из функций. C++ и C имеют указатели функции, которые могут использоваться так же. делегаты.NET могут также использоваться так же.

затем можно думать обо всех видах о прохладных абстракциях...

Делают у Вас есть функциональный AddItemsInList, MultiplyItemsInList, и т.д.?
Каждая функция берет (Список) и возвращает единственный результат

, Вы могли создать (примечание, много языков не позволяют Вам передавать + вокруг как функция, но это кажется самым ясным способом выразить понятие)....

AggregateItemsInList(List, combinefunction, StepFunction)

Инкрементная работа функций над индексами... лучше должна была бы заставить их работать над списком с помощью операций списка как следующий и для incTwo затем затем, если это существует....

function incNormal(x) {
  return x + 1
}

function incTwo(x) {
  return x + 2
}

AggregateItemsInList(List, +, incNormal)

Хотите сделать любой объект?

AggegateItemsInList(List, +, incTwo)

Хотите умножиться?

AggregateItemsInList(List, *, incNormal)

Хотите добавить очки экзамена вместе?

function AddScores (studenta, studentb) {
   return studenta.score + studentb.score
}

AggregateItemsInList(ListOfStudents, AddScores, incOne)

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

-1
ответ дан 29 November 2019 в 23:20
поделиться

Есть два отдельных определения:

  • Старое определение (функции первого класса) было дано Крисом Конвеем.

  • Новое определение (предотвращение побочных эффектов, таких как мутация) было дано Джоном Штауффером. Это более широко известно как чисто функциональное программирование.

Это источник большой путаницы ...

1
ответ дан 29 November 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: