www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Функциональное программирование в Haskell

Дата публикации Oct 3, 2019

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

Переосмыслите способ кодирования

История вопроса

Первое, что я замечаю, когда начинаю проходить курс функционального программирования в Universitas Indonesia, это «Хм, как это можно сделать именно так?». Оказывается, это причина, по которой это называется функциональным программированием, чтобы изменить старую парадигму императивного программирования.

Функциональное программирование

Итак, каково определение функционального программирования?Функциональное программированиеэто стиль программирования, который моделирует вычисления как оценку выражений.(Haskell Wiki), «Оценка выражения» означает, что мы сообщаем компьютеру, чего мы хотим. В отличие от императивного программирования, мы сообщаем компьютеру, как мы можем решить эту проблему. Пример проблемы, которую можно использовать для отображения в этих двух стилях программирования, - это простые проблемы, такие как поиск максимального значения в списке.

Функциональное программирование против императивного программирования

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

def max(arr):
maxVar = arr[0]
for i in arr:
if i > maxVar: maxVar = i
return maxVar

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

maximum (x:xs)
| maxVar > x = maxVar
| otherwise = x
where maxVar = maximum (xs)

Выше код на Haskell реализует шаблонные средства защиты, которые можно использовать для проверки заданного условия на основе аргумента и определения константы в «где». Если мы бежиммаксимум [1,4,5],казнь начинается с

максимум [1,4,5] ->

maxVar = максимум [4,5] ->

maxVar = максимум [5] ->

в противном случае = 5 ->

(извлечение из стека для предыдущего вызова функции) 5> 4 = 5 ->

5> 1 = 5

максимум [1,4,5] = 5

Наконец, мы получаем максимальный элемент из списка. Если вы посмотрите на эти реализации решения одной и той же проблемы, мы поймем, что императивное программирование и функциональное программирование имеют разные способы решения проблем. По императивному программированию мы привыклимутирование переменной, Но с другой стороны, функциональное программирование или декларативное программированиене изменяет никакие переменныемы склонны объявлять константу, которая является неизменным состоянием (не может быть изменено). Преимущество отсутствия изменения переменной состоит в том, что функциональное программирование не оказывает никакого побочного эффекта на выполнение ее функции (поэтому ее можно назвать чистой функцией). Функция Pure - это когда у вас есть функция, которой вы даете свой ввод «a», она всегда возвращает «b», а не другие. В отличие от императивного программирования, мы можем мутировать глобальную переменную, поэтому, когда глобальная переменная влияет на функцию, функция не может быть просто функцией, потому что может быть условие, когда мы мутируем глобальные переменные и получаем результат, отличный от ожидается. Следовательно, Haskell - это язык, который не имеетпобочные эффекты, Наш код легко протестировать, поскольку мы всегда знаем, какое значение будет возвращено.

Вывод

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

Ссылки

Функциональное программирование

Функциональное программирование - это стиль программирования, который моделирует вычисления как оценку выражений. Это…

wiki.haskell.org

http://learnyouahaskell.com

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map