Задать вопрос

Поясните про замыкания в ФП?

Вот, например, код на Haskell:
add a b = a + b
Вроде всё нормально, функция чистейшая. Но ведь можно записать и по-другому, с блекджеком замыканием и лямбдами:
add = \a -> \b -> a + b
И вот тут уже кое-что становится непонятно. Вроде как обе функции должны быть чистыми (ведь "грязными", насколько я понял, в Haskell могут быть только функции типа IO() или что-нибудь подобное, здесь же -- самые обыкновенные функции). Но при этом лямбда \b -> a + b по идее не должна видеть переменную a. Но она видит. Значит она не чистая?

Можете, пожалуйста, объяснить, как замыкания сосуществуют с функциональной парадигмой?
  • Вопрос задан
  • 783 просмотра
Подписаться 4 Оценить Комментировать
Решения вопроса 1
Чистая. Рассмотрим foo = add 2, foo x для некоторого x всегда возвращает одно и то же значение, а также не производит никакого эффекта, наблюдаемого извне, и потому подпадает под определение чистой функции. Т.е. foo = add 2 идентичен функции foo x = 2 + x, которая, очевидно, чистая.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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