изменить порт 8888 -> 8080
ПЕРЕЙТИ в RUN -> Редактировать конфигурации и изменить порт с 8888 на 8080 Ваша ячейка юпитера должна быть хорошо выполнена.
Я сказал бы, что определяющая точка чистого функционального программирования - то, что все вычисление сделано в функциях с никакой побочные эффекты. Таким образом, функции берут исходные данные и возвращаемые значения, но не изменяют скрытого состояния В этой парадигме, функции более тесно моделируют своих математических кузенов.
Это было закреплено для меня, когда я начал играть с Erlang, языком с неперезаписываемым стеком. Однако нужно разъяснить, что существует различие между парадигмой программирования и языком программирования . Языки, которые обычно упоминаются как функциональные, обеспечивают много функций, которые поощряют или осуществляют функциональную парадигму (например, Erlang с, он - неперезаписываемый стек, функции высшего порядка, закрытия, и т.д.). Однако парадигма функционального программирования может быть применена на многих языках (с различными степенями боли).
Способность перечислить функции более полезна, чем попытка определить сам термин, поскольку люди используют термин "функциональное программирование" во множестве контекстов со многими оттенками значения через континуум, тогда как отдельные функции имеют индивидуально более свежие определения, которые более универсально согласованы.
Ниже функции, которые приходят на ум. Большинство людей использует термин "функциональное программирование" для обращения к некоторому подмножеству тех функций (наиболее распространенные / важные, являющиеся "чистотой" и "функциями высшего порядка").
функции FP:
, Чем больше функций из вышеупомянутого списка Вы используете, тем более вероятно кто-то маркирует то, что Вы делаете "функциональное программирование" (и первые две функции - чистота и функции высшего порядка - вероятно, стоят большинство дополнительных бонусных очков к Вашему "счету FP").
От Википедия :
В информатике, функциональное программирование является парадигмой программирования, которая рассматривает вычисление как оценку математических функций и избегает и изменяемых данных состояния. Это подчеркивает приложение функций, в отличие от стиля императивного программирования, который подчеркивает изменения в состоянии.
Используя функциональный подход приносит следующую пользу:
существует большая статья с большим количеством детали здесь .
Много определений до сих пор подчеркнуло чистота , но существует много языков, которые считают функциональными, которые нисколько не чисты (например, ML, Схема). Я думаю ключевые свойства, которые делают язык "функциональным":
, Учитывая эти два свойства, Вы естественно получаете поведение, о котором мы думаем как функциональные (например, выражая вычисления с точки зрения сгибов и карт). Устранение изменяемого состояния является способом сделать вещи еще больше функциональный.
Я должен добавить, что функциональное программирование склоняется к также абстрактным управляющим структурам Вашей программы, а также домена - например, Вы больше не делаете 'для цикла' в некотором списке вещей, но Вы 'отображаете' его с некоторой функцией для создания вывода.
я думаю, что функциональное программирование является настроением, а также определением, данным выше.
Это похоже на рисование изображения при помощи векторов вместо битовых массивов - говорят живописцу, как изменить изображение вместо того, на что изображение похоже на каждом шаге.
Это - приложение функций в противоположность изменению состояния.
Я думаю, что у 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)
Высокого уровня функции являются очень мощной абстракцией. Вместо того, чтобы иметь необходимость записать пользовательские методы для чисел, строк, студентов, и т.д. у Вас есть один совокупный метод, что циклы через список чего-либо и просто необходимо создать операцию сложения для каждого типа данных.
Есть два отдельных определения:
Старое определение (функции первого класса) было дано Крисом Конвеем.
Новое определение (предотвращение побочных эффектов, таких как мутация) было дано Джоном Штауффером. Это более широко известно как чисто функциональное программирование.
Это источник большой путаницы ...