www.machinelearningmastery.ru

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

Home

Дневник функционального программирования - первый месяц

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

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

Функциональное программирование - опыт начинающего

4 недели лекции

Функциональное программирование является одной из мировых парадигм программирования. Это отличается от императивной парадигмы, парадигмы, с которой, я полагаю, знакомы большинство программистов. Функциональное программирование отличается от императивного в том смысле, что функциональное программирование больше сосредоточено на том, «что вы хотите сделать», а не на «как вы что-то делаете». Эти две фразы звучат настолько абстрактно, я знаю, я тоже сначала это почувствовал, но после 4 недель изучения этого предмета я начинаю немного понимать смысл этого. Я покажу пример в последней части этой статьи. До этого курса я только «попробовал» что-то дистанционно-функциональное программирование, используя немного response-redux и, возможно, создание декоратора.

Язык, который используется для изучения FP в этом курсеHaskell, На первой неделе настало время знакомства с Haskell. Мы изучили основы Haskell, такие как типы данных. Честно говоря, первые две недели были действительно вне меня, особенно вторая неделя. Первая неделя была на самом деле не так уж плоха, и я все еще могу быть в курсе, если я посмотрю, но вторая неделя действительно тяжелая, потому что был приглашенный лектор из Португалии, г-н Жуан Сарайва,это представляло довольно продвинутый предмет по функциональному программированию, хотя урок шел всего 1 неделю. Тем не менее, хотя я не совсем понимаю крошечные лакомые кусочки лекции мистера Сарайвы, это действительно был интересный опыт. Он рассказал о том, как Haskell можно использовать для создания конечных автоматов и автоматов всего за 50 строк. Автоматы были довольно сложным предметом, поэтому прослушивание его лекции также освежает (или просто говорит мне, что мне нужно обновить) знания об этом.

Начиная с третьей недели, он возвращается к г-ну Аде Азурату, главному преподавателю этого курса. С третьей недели мы продолжаем изучать Haskell от его основ. Если я правильно помню, мы изучали функцию высшего порядка. Прежде чем двигаться дальше, я хочу быть честным здесь, я не уделял много внимания в классе с третьей недели. Это вызвало очень серьезную дыру в знаниях в моем мозгу, и я благодарю мистера Ада за то, что он дал нам это полезное задание, чтобы я мог мотивировать себя учиться и заполнить эти пробелы.

И уже четвертую неделю мы начали изучать понимание списков. На этой неделе я снова пытаюсь обратить внимание, хотя и поздно прихожу в класс. И, парень, я думаю, что, обращая внимание, я действительно нахожу что-то очень завораживающее, я только что испытал аспект WOW функционального программирования. Мистер Ад рассказал о ленивых оценках, и я вижу, что это очень аккуратно. В сочетании с примером понимания списка мистером Аде я могу видеть, как быстрая сортировка реализована всего в 2 строки. Да, 2 строки, и я не имею в виду «удалить все пробелы» 2 строки (что вы можете сделать в Java). Видя, что это действительно движет шестерен в моем мозгу и вызывает некоторую степень любопытства во мне.

Упражнение

Мистер Аде дал студентам задание писать блоги, и я тут же подумал: «Итак, блог в стиле PPL, а?». PPL - это курс для проекта разработки программного обеспечения в нашем кампусе. Но для того, чтобы написать этот блог, мне нужно переучиться, может быть, все и попытаться сначала выполнить упражнения. Я собираюсь быть честным здесь (сколько раз я был честен в этом посте?), Так как я не уделял много внимания на уроке на третьей неделе, и я не особо пересматривал первую неделю, Я в полном недоумении, когда вижу упражнение в первый раз. Но в этом смысл упражнения, не так ли? Чтобы вбить это знание в вашу голову, чтобы вы не забыли его, или на самом деле понять его глубже.

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

Функциональное программирование - усвоенные знания

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

Итак, основное определение понимания списка выглядит так:

[x*2 | x <- [1..10], x*2 >= 12]

Обозначение на самом деле очень похоже на обозначение математического набора.x*2означает, что элемент в одной точке будет х в степени 2.x <- [1..10]это диапазон, это означает, что число, которое будет присвоено x, находится в диапазоне от 1 до 10, включая оба конца.x*2 >= 12является предикатом, данный элемент из диапазона будет обрабатываться, только если предикат возвращает true.

Итак, почему я заинтересован в этом?

Это потому, что понимание списка смешивается с небольшим количеством рекурсии, а функциональное программирование Haskell mumbo jumbo может определять быструю сортировку всего двумя строками. Смотрите это здесь:

quicksort [] = []quicksort (x:xs) = quicksort [y | y <- xs, y < x] ++ [x] ++ quicksort[y | y <- xs, y >= x]

Выше приведена рабочая реализация быстрой сортировки. Если вы сравните его с императивным стилем определения быстрой сортировки, ну, с точки зрения длины кода, это явный победитель. Конечно, я еще не видел реальную производительность, но все же, я думаю, это действительно показывает разницу между императивной и функциональной парадигмами. Когда вы пишете императивный код, вы действительно сосредотачиваетесь на написании того, что должна делать программа, меняете этот элемент, увеличиваете индекс и так далее. С функциональным программированием вы сосредотачиваетесь на общей картине. Знайте, что вы хотите получить, чего вы хотите достичь, и объявите это. Не нужно «микроуправлять» компьютером, чтобы добиться цели.

Так что же дальше?

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

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

Footer decor

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