Нужно ли функциональное программирование в машинном обучении?
Интересуюсь областями сколько-нибудь связанными с ИИ, в частности, компьютерным зрением и автоматической обработкой текстов.
Появилась возможность посещать курс "Функциональное программирование", где в программе изучается диалект Lisp (scheme) плавно переходящий в Haskell. Ничего не имею против функциональных языков и вроде понял отличия от императивных ЯП, тем не менее, не понимаю, где это самое функциональное программирование применимо, и нужно ли оно, например, в машинном обучении.
Конечно же, для общего развития ФП в любом случае полезно, но по сути придётся тратить большое количество времени на прохождение курса (и проезд). Оттого и вопрос: может, стОит потратить время на более обширное изучение-таки теории машинного обучения, нежели заниматься функциональщиной? Гуглением показалось, что оно очень мало где применимо в реальной жизни.
lexa4lexa, Вам повторить ссылку или сами в состоянии прочесть? Проще сказать, чего в С нет...там все есть.
Ниже, отвечая Artem Gapchenko я дал две ссылки по теме - посмотрите.
Александр, в С есть все. Это же почти ассемблер, а на ассемблере можно сделать все.
Только функциональное программировние - это не результат, а способ создания программы.
Так что с С - мимо
Александр, С - классический императивный алгоритмический язык.
Не более.
Ничего функционального там нет.
Можно смоделировать - но это будет уже не С, а библиотека, написанная на С.
Ну а без оптимизаций компилятора - толку от такой функционалщины не будет.
Александр,
ну мое-то мнение - общеупотребимое. ни в одном списке функциональных языков С не участвует.
вы можете привести какое-то мнение кроме вашего в защиту функциональщины в С?
mzG2Gzm, "....ну мое-то мнение - общеупотребимое" - это тоже всего лишь ваше мнение и ничего больше. Кто вам сказал о его "общеупотребимости"?
Я многое могу, но в данном случае не пойму, почему я должен это с вами муссировать. Тема не ваша, отвечал я не вам, да и временем таким я не располагаю, чтобы исполнять пожелания всех просящих что-то им разъяснить "здесь, сейчас и срочно". Я дал ссылки на ресурсы, там все есть. Читайте внимательно.
Деревянко Александр, вы дали ссылку о применимости С.
Про функциональное программирование - там нет.
Или вы путаете термин функциональность языка и функциональный язык? Это разные вещи вообще то.
mzG2Gzm, и последний раз, для тех кто в танке...
1. здесь дословно и далее по тексту (читать внимательно!) "В языке C указатели на функцию в качестве типов аргументов..." - это о ФП в нефункциональных языках;
2 здесь дословно "Так, на языке Си, который не является объектно-ориентированным, можно работать ..." о ФН в СМ как о парадигме программирования.
ТЕМА ЗАКРЫТА - вам больше не отвечаю.
mzG2Gzm, вы уже начинаете думать....это радует. И вообще - чем проще, тем лучше.
Если можно на ассемблере - почему нет? Если чел его хорошо знает и сделает это - так я только за..
Деревянко Александр, ФП вообще то не о том, что есть, а о том, чего нет или ограничено и чем удобно пользоваться за счет избавления от лишнего.
Языки, дизайн которых (и языка, и библиотек ) построен на операции присваивания ни как не могут считаться функциональными. Это относится не только к C, но и к Common Lisp, где, в отличие от Scheme, разрушающее присваивание очень важно.
К примеру, великая openCV, использующая многие алгоритмы машинного обучения изначально вообще написана на С, затем к ней присовокупились С++ и товарищи. Нужно конечно. На чистом СИ можно написать практически все и даже больше. Кстати, си в тренде на 2(!!!) месте, обгоняя почти всех. Делайте выводы. ссылка здесь.
Artem Gapchenko, вообще-то это учат на первых курсах ВУЗов, но раз вы спросили - вот вам ссылка, определяющая понятие функц. программирования как парадигму тут
а вот вторая, связывающая С с этим понятием тут
удачи в обучении.
Ох уж эти мне специалисты, хорошо учившиеся на первых курсах ВУЗов.
Вообще-то есть ощущение, что вы не понимаете разницы между функциональным и процедурным программированием. Косвенно это можно определить по тому, что вы накидали ссылок, а своего объяснения дать так и не смогли.
Удачи в дальнейших рассказах о том, как вы хорошо учились в ВУЗе.
Еще раз - можно и гвозди микроскопом забивать, но зачем? Есть языки, которые очень хорошо позволяют писать в функциональном стиле - те же Lisp и Haskell, упомянутые топик-стартером. А есть C, на котором вроде бы и указатели на функции есть, которые позволяют худо-бедно функции высшего порядка реализовать, и есть возможность чистые функции писать, и оптимизацию хвостовой рекурсии можно руками сделать, но для чего, если есть более удачные инструменты? Зачем вы на вопрос: "Надо ли изучать Haskell?" отвечаете: "Да, С очень хороший язык, обязательно изучайте"? Потому что не поняли вопроса?
Artem Gapchenko, вот..это уже слова "не мальчика, но мужа" :-) (как говорил Пушкин АС). Тут вы правы...нужно ли...и эффективно ли - да. Эта посылка требует доп. оценки. Я просто ратовал за СИ, как за язык, который может все (думаю, вы со мной согласитесь), но который в последнее время незаслуженно (особенно у нас) начал как-то...затаптываться. Я согласен с вами, только вот фраза "..более удачливые инструменты" меня смущает. Я так не считаю. СИ удачен всегда - вопрос в другом, как вы им владеете в требуемом направлении (вы - или я, не суть..). Это как есть хороший мастер в плохой школе боевых искусств, и наоборот, в классной школе - плохой ученик. Все зависит от степени владения инструментом.. а вопрос я понял, к чему вы так.. а си и правда хороший язык и изучать его можно и нужно для любых задач (но это всего лишь мое личное мнение). Даже куски сайтов пишут на нем (наиболее нагруженные) - однако, да? Хотя разве он для этого??
Александр, Словоблудие. C не всегда удачен. Если вы хорошо владеете молотком и можете им забить шуруп - это не является хорошим применением. Изучать можно и нужно, тут пожалуй соглашусь. "Куски сайтов"? Быть может, части бэкэнда? Вы вообще программист?
Александр, мда. Си - процедурный язык, но никак не функциональный. Забавно что Вы скинули статью из википедии даже не удосужившись её открыть и прочитать сами.
Сейчас ML занимаются в основном на языках с плохой поддержкой функционального стиля.
Но многие вещи из теории ML излагается обычно в терминах чистых функций, функциональное программирование дает новый взгляд на работу с контейнерами и потоками, фреймворки для работы с большими данными в какой-то степени функционально-ориентированны. Так что есть шансы что доля языков с ФП в ML будет расти - Scala и Julia набирает популярность, да и R пока держется.
Написано только что