Тёмный

Почему функции в языке Haskell - сущности первого порядка? Душкин объяснит 

Dushkin will explain
Подписаться 14 тыс.
Просмотров 649
50% 1

Да, в языке Haskell функции являются сущностями первого порядка, которые можно передавать в качестве значений в другие функции.
Курс по функциональному программированию на Udemy: www.udemy.com/...
ТГ-канал Романа Душкина: t.me/drv_official
#ФП #Программирование #Функция #ФункциональноеПрограммирование #Haskell #Хаскель #Хаскелл #Видеошпаргалка #РоманДушкин #ДушкинОбъяснит #Параметр #Передача

Опубликовано:

 

29 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 39   
@dushkin_will_explain
@dushkin_will_explain 2 года назад
Все видео по функциональному программированию в одном плейлисте: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-bPCBb1U56yw.html И вы всегда можете обратиться к нам за консультациями.
@IExSet
@IExSet Год назад
фёРст класс ситизенс :-)
@dushkin_will_explain
@dushkin_will_explain Год назад
Дойч ист майн эрстэ фрэмдэ Шпрахэ, я.
@alexanderskusnov5119
@alexanderskusnov5119 Год назад
Для других структур вообще-то используется не монада, а функтор, а именно, функция fmap, он же оператор .
@dushkin_will_explain
@dushkin_will_explain Год назад
Мы ещё не изучили к этому моменту таких страшных слов.
@a-rg1tj
@a-rg1tj 11 месяцев назад
В python тоже есть map, удобная штука, тоже принимает функцию в качестве параметра. Я когда узнал в пайтоне про функции высшего порядка как будто новый мир открыл) насколько это удобнее циклов
@dushkin_will_explain
@dushkin_will_explain 11 месяцев назад
О, да. Когда постигаешь функциональный дзен, мир программирования начинает играть совершенно иными красками.
@nartoomeon9378
@nartoomeon9378 Год назад
Как же классно слушать о языке, который способен физически реализовать и использовать вещи из алгебраической топологии! Я относительно недавно проходил ознакомительный курс с АлгТопа и я начинаю видеть теорию категорий... Однако, лямбда-исчисление как раз является иным представлением категории или вобще теории категорий. Я теперь точно знаю, что дальше будут и функторы и категории функторов.. Хаскель, наверное, не может достичь бесконечность-категорий(супер-категории), где немного упрощается башня категорий от категорий, а именно, - морфизмы объектов категории пополняются морфизмами между морфизмами.. ну и так в бесконечность..на соко я понял.
@dushkin_will_explain
@dushkin_will_explain Год назад
Это точно!
@moshamiracle
@moshamiracle Год назад
бывают в других бесконечные - генераторными функциями обычно кличут, которые стек вызова свой и состояние запоминать могут
@dushkin_will_explain
@dushkin_will_explain Год назад
Вы про что?
@moshamiracle
@moshamiracle Год назад
@@dushkin_will_explain про некомпетентные заявления, что в других ЯП нельзя делать бесконечные списки/циклы и отрабатывать их, пока память компа не закончится или как-то не остановим вводом. В js/питонах и им подобных - через генераторы, в плюсах - корутины, в Lua - замыканиями и т.д.
@АнтонПейсахович
@АнтонПейсахович 11 месяцев назад
Может вам будет любопытно что там творится на императивной стороне, у нас тоже появляются похожие штуки :) В C# можно похожим образом объявлять/передавать функции: var sqr = (int x) => x * x; var map = (Func f, int[] a) => a.Select(f); Вообще, код бы выглядел скорее как-то так: var arr = new int[] { 1, 2, 3, 4, 5 }; var res = arr.Select(x => x * x); Насчет бесконечности, полноценной бесконечности нет, но можно написать коллекцию, обход которой по сути будет вариантом бесконечного цикла. Допустим мы хотим из нашей бесконечности натуральных чисел посчитать квадраты первых пяти, это будет выглядеть как-то так: var inf = new MyIfinity(); var res = inf.Take(5).Select(x => x * x).ToArray(); Здесь мы возьмем пять элементов и посчитаем их квадраты только на этапе вызова ToArray(), а остальную бесконечность оставим для других сценариев :)
@dushkin_will_explain
@dushkin_will_explain 11 месяцев назад
Проблема таких языков в том, что в них подобные штуки являются надстройками, которые не вписываются в концепцию языка гармонично.
@АнтонПейсахович
@АнтонПейсахович 11 месяцев назад
​@@dushkin_will_explain это правда, хоть формально у того же C# и нет единой концепции, есть наборы инструментов для разных стилей, но практика говорит сама за себя. Зато после ваших лекций начинаешь лучше понимать идеи, стоящие за новыми инструментами, вроде тех же switch-expressions в C#. Спасибо за ответ и в целом за ваш труд
@dushkin_will_explain
@dushkin_will_explain 11 месяцев назад
@@АнтонПейсахович, мне нравятся такие комментарии :)
@ТимофейКвасцов-ж2г
У вас ошибочка, которая впрочем не повлияла на результат. После исправления map' забыли второе вхождение map исправить на map'
@dushkin_will_explain
@dushkin_will_explain Год назад
Да, точно. Я иногда такой невнимательный. Благодарю за уточнение.
@nartoomeon9378
@nartoomeon9378 Год назад
Как я понял, нашим IDE на все шпаргалки будет блокнот виндовса.
@dushkin_will_explain
@dushkin_will_explain Год назад
Почему бы и нет?
@nartoomeon9378
@nartoomeon9378 Год назад
@@dushkin_will_explain настоящие прогеры могут и в блокноте!
@artyomboyko8219
@artyomboyko8219 3 месяца назад
Спасибо за видео Я не знаю хаскель, подскажите Функция map в своем теле берет идентификаторы f, x, xs из параметров Но откуда она берет идентификатор map? Разве это не сайд эффект? Если нет, то почему?
@dushkin_will_explain
@dushkin_will_explain 3 месяца назад
Рекурсивный вызов же.
@artyomboyko8219
@artyomboyko8219 3 месяца назад
@@dushkin_will_explain Я понимаю, что это рекурсия Но идентификатора map нет в параметрах функции map Вопрос, откуда в теле функции map идентификатор самой себя? Откуда он, если не из внешнего мира? Если я не правильно в принципе рассуждаю с точки зрения хаскеля, то как правильно? Повторю вопрос, откуда внутри тела функции map идентификатор на саму себя (map) ведь его нет в параметрах
@dushkin_will_explain
@dushkin_will_explain 3 месяца назад
@@artyomboyko8219, ну а представьте, это был бы не вызов map, а вызов, например, foldl? Что бы изменилось? Где тут побочный эффект, то есть запись в «чужую» память? Это просто вызов функции.
@artyomboyko8219
@artyomboyko8219 3 месяца назад
​@@dushkin_will_explain что такое чужая память? это любая память ссылка на которую не была прокинута в функцию через параметры или создана внутри тела функции я не вижу здесь записи в чужую память, поэтому, готов согласится, что сайд "эффекта" нет но я вижу чтение чужой памяти, вижу исполнение кода, ссылка на который поступает в функцию не через параметры (если это не называется сайд эффектом, пусть так) Мой вопрос прост, откуда внутри тела функции map идентификатор map? Откуда ссылка на память, в которой лежит функция map? Физически, откуда? Просто было сказано в предыдущих видео, что в хаскеле функции используют только то, что пришло им в параметры, но здесь я вижу обратное функция f приходит в параметры - прекрасно, поэтому мы используем ее внутри тела, но функция map не приходит в параметры PS что такое foldi не знаю, поэтому не могу сказать, что бы изменилось
@artyomboyko8219
@artyomboyko8219 3 месяца назад
​@@dushkin_will_explain Я не вижу здесь записи в чужую память, поэтому, готов согласиться, что это не сайд эффект Но я по прежнему не понимаю, откуда внутри тела функции map идентификатор map Я вижу откуда идентификатор f - из параметров но не идентификатор map таким образом функция map работает не только со своими параметрами, но и с внешними идентификаторами
@lasthero67
@lasthero67 2 года назад
А напрямую в скур можно список засунуть? Зачем мэп?
@dushkin_will_explain
@dushkin_will_explain 2 года назад
Нельзя. Язык Haskell обладает строгой типизацией. Перемешивать типы нельзя. Если функция требует параметр типа а, то ей никак нельзя передать параметр типа [а], то есть список элементов типа а.
@Jamcoc0s
@Jamcoc0s 7 месяцев назад
Что-то я не понял смысла особо выделять первый элемент списка и "все последующие" (голову и хвост на 7:07)
@dushkin_will_explain
@dushkin_will_explain 7 месяцев назад
Потому что список именно так определяется как алгебраический тип данных: List a = [] | a : List a
@Jamcoc0s
@Jamcoc0s 7 месяцев назад
@@dushkin_will_explain Получается такая конструкция это как бы дань привычной форме записи для математиков, если я правильно понимаю. Просто я не нахожу в этом никакой логики
@dushkin_will_explain
@dushkin_will_explain 7 месяцев назад
@@Jamcoc0s, как вы хотели бы записать определение функции map?
@Jamcoc0s
@Jamcoc0s 7 месяцев назад
@@dushkin_will_explain я бы ожидал что по-классике, просто, сразу весь список, без не понятного выделения первого элемента :) я бы понял если это был Range, но здесь все странно :)
@dushkin_will_explain
@dushkin_will_explain 7 месяцев назад
@0s, как можно сразу весь список, если его длина неизвестна, и вообще он может быть бесконечным?
Далее
DAXSHAT!!! Avaz Oxun sahnada yeg'lab yubordi
10:46
Просмотров 334 тыс.
▼ КАПИТАН НАШЁЛ НЕФТЬ В 🍑
33:40
Просмотров 346 тыс.
Все о принципах SOLID
16:07
Просмотров 25 тыс.
Теория струн (ScienceClic)
16:01
Просмотров 2,5 млн
Ядерка-как это будет.
25:55
Просмотров 223 тыс.
DAXSHAT!!! Avaz Oxun sahnada yeg'lab yubordi
10:46
Просмотров 334 тыс.