machinelearningmastery.ru

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

Home

Мой опыт обучения функциональному программированию.

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

Дневник в сопровождении Хаскелла.

Функциональное программированиев двух словах этопарадигма программированияЭто стиль программирования, в котором вы объявляете компьютеру свои намерения, а не говорите компьютеру, что делать.

Мой первый опыт в функциональном программировании начинается сReduxгде, если вы работали с Redux до того, как заметите много семантик функционального программирования, и, как правило, основные концепции Reduxфункциональная,

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

Класс функционального программирования

Я в настоящее время беру класс функционального программирования, и в этом классе я был представленHaskellХаскельчисто функциональный язык программирования, Я не слишком углубился в Haskell, но мои первые впечатления заключаются в том, что он изобилует функциональными функциями. например, карты JS, Reduce, Filter и т. д. Многие из этих функций вы найдете в Haskell. Поэтому я думаю, что изучение этого языка - это хороший способ заставить себя думатьфункционально,

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

Затем нас познакомили с синтаксисом Haskell, и я сразу же почувствовал необходимость скорректировать мой способ чтения и кодирования с помощью Haskel. Первое, что я заметил, это то, что функция Haskell не использует «()», они просто пишут это слева, т.е.

someFunction paramA paramb = paramA + paramB

о, и прежде чем «писать» функцию, вы «объявляете» ее сначала как

someFunction :: Integer -> Integer -> Integer

и, маленькая вещь о Хаскеле, это то, что он знает,выражениеэтоколичество,голец, илистрока.

проверка типов выражений

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

в Хаскеле это будет выглядеть примерно так:

circleArea :: Floating a => a -> a
circleArea diameter = pi * radius * radius
where
radius = diameter / 2.0 -- local binding

приведенный выше код более или менее похож на это в JavaScript

function circleArea(a) {
let radius = a / 2.0;
let diameter = pi * radius * radius;

return diameter;
}

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

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

circleArea = (радиус) => пи * радиус * радиус;

В Haskell вы, вероятно, будете часто встречаться с HOC.

Вот пример HOC в Haskell (взят из учебника)

import Data.Char  
import Prelude hiding (map) map :: (a -> b) -> [a] -> [b]
map _ [] = []
map func (x : abc) = func x : map func abc
main = print $ map toUpper "tutorialspoint.com"

Тогда, совсем недавно, нас учили Пониманию Списка. Понимание списка не уникально в Haskell, вы могли столкнуться с ним раньше в Java или Python. Но понимание списков в Haskell очень похоже на то, как вы пишете нотации в классе Math Discrete или что-то в этом роде.

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

Footer decor

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