LINUX.ORG.RU

[ФП][LISP] С чего начать?

 


1

1

Недавно узнал, что на нашей специальности ФП преподавать не будут. Считаю это крайне неверным ходом, по-этому хочу взять всё в свои руки.

С чего лучше всего начать изучать ФП (с нуля)? Думается, что для общего развития будет полезно осилить LISP.

PS На других языках программировал, матан сдавал :)

★★★★★

Ответ на: комментарий от GotF

> Только Haskell.

Про него слышал много хорошего (на соседней специальности его семестр преподают). Но почему не Lisp? или мой неокрепший разум не осилит? или он недостаточно функционален?

helios ★★★★★
() автор топика
Ответ на: комментарий от helios

Haskell является функционально чистым. Личное дело, конечно, но я выбрал именно его, поскольку стало интересно освоить ФП, но не хочется видеть там лишнее от других парадигм.

GotF ★★★★★
()
Ответ на: комментарий от GotF

Благодарю. Пожалуй, также поступлю.

helios ★★★★★
() автор топика

Scheme, порог вхождения очень низкий -> практически не нужно учить сам язык.

pseudo-cat ★★★
()

Языка «LISP» нет уже лет 40 как.
Есть семейство языков «Lisp».
На данный момент самые распространенные языки этого семейства - Common Lisp, Scheme и Clojure.
Все они являются функциональными, но, несмотря на то, что на каждом из них можно писать в функциональном стиле, удобство программирования в этом стиле в них различается. Например, в CL оно несколько меньше, чем в остальных. В Scheme - больше.

Но, вообще, функциональное программирование - далеко не самая основная фича лиспа как семейства языков. Самая основная - удобство метапрограммирования(ну и еще некоторые, в зависимости от конкретного языка - так, в CL еще и крутейшая объектная система, в Clojure - удобства для многопоточного программирования(STM etc.)).

Почитать для начала можно SICP:
http://newstar.rinet.ru/~goga/sicp/sicp.pdf
Если заинтересовался CL - PCL:
http://lisper.ru/pcl/
Про Clojure вот тут есть почитать:
http://alexott.net/ru/clojure/clojure-intro/

Тут вот Хаскель советуют, но, на мой взгляд, введение в ФП лучше начинать не с него - язык довольно мутный, со сложным синтаксисом и типизацией, которая отвлекает от самого ФП(кто-то недавно замечал, кстати, что Хаскель язык не то, чтобы функциональный(ну, вернее, не только такой), а, скорее, алгебраический).

Love5an
()
Ответ на: комментарий от Love5an

> а, скорее, алгебраический

Он скорее просто «очень строго академический», синтаксис максимально приближен к математической записи ФП аппарата.

Так что если ТС хочет просто «to have some fun with functional programming», то возможно scheme будет попроще в освоении, если хочет глубоко вкурить в теорию - то лучше взять хаскель.

a_nan
()
Ответ на: комментарий от Love5an

В CL, кстати, есть еще и офигительная система обработки исключений без раскрутки стека, с т.н. перезапусками, плюс макросы считывателя(можно произвольно менять синтаксис), ну и плюс блэкджек и шлюхи. Come to the dark side, we have cookies.

Love5an
()

>С чего лучше всего начать изучать ФП (с нуля)?

С книги «Введение в функциональное программирование» и продолжить книгой «Purely Functional Data Structures», параллельно читая по OCaml|SML что-либо

arhibot
()
Ответ на: комментарий от Love5an

Меня радуют плюшки ФП, типа распараллеливания. Думается, что если я это не освою, то буду «прилипать» в качестве разработчика.

Помимо этого, мне жутко интересен сам подход ФП, ибо императивное программирование всё меньше радует.

Ну и комплексы, что я не знаю Lisp :)

По ходу, придётся надолго засесть...

helios ★★★★★
() автор топика

Сейчас совместно с женой слушаем курс F# от Сошникова Д.В. на intuit.ru. У меня Windows'а нет, ставить F# в моно лень, поэтому тренируюсь с ocaml-ем. Плюсы такого изучения - это курс лекций, а значит он больше рассчитан на обучение.

П.С. Кстати, Сошников когда-то был активным опенсорсником, у него даже свой дистрибьютив Линукса был, а теперь вот, евангелист Microsoft :)

rymis ★★
()

[ФП][LISP] С чего начать?

С открывающейся круглой скобки, очевидно же.

kemm
()

https://code.google.com/p/funprog-ru/ - вот переввод курса лекций «Введение в функциональное программирование» - там есть и теория и практика.

Больше литературы можно найти в http://alexott.net/ru/fp/books/, я обычно еще рекомендую SICP, который хоть не только про ФП, но там очень много полезного материала

ott ★★★★★
()
Ответ на: комментарий от ott

Благодарю! Сильно рассчитывал на Ваш приход в тред.

helios ★★★★★
() автор топика
Ответ на: комментарий от rymis

П.С. Кстати, Сошников когда-то был активным опенсорсником, у него даже свой дистрибьютив Линукса был, а теперь вот, евангелист Microsoft :)

Продажная сволочь!

mv ★★★★★
()

Я бы начал с того, что посоветовал Алекс Отт. Плюс лекции Дмитрия Сошникова на intuit.ru - http://www.intuit.ru/department/pl/funcprog/1/

Общее с лекциями Харрисона - это использование ML в качестве языка обучения (У Харрисона это CamlLite, а у Сошникова F#, многие из примеров должны пойти и там и там).

cab ★★★★
()

Плюсую Haskell. Хоть он и не распространён в реально разработке, в нём собраны все основные (и не основные) концепции ФП. Изучая его, мозг прокачивается так, что осилить любой другой фунцкиональный язык не представляет проблемы - остаётся только вкурить разницу в синтаксисе.

shuthdar ★★★
()
Ответ на: комментарий от shuthdar

> Изучая его, мозг прокачивается так

Про прокачивание мозга полный бред. Он (мозг) либо есть, либо его нет. Штанга здесь не поможет.

archimag ★★★
()

Вот и еще одна жертва лоровских лиспотроллей…

Одумайся пока не поздно!

fat_angel ★★★★★
()
Ответ на: комментарий от Love5an

> Тут вот Хаскель советуют, но, на мой взгляд, введение в ФП лучше начинать не с него - язык довольно мутный, со сложным синтаксисом и типизацией

да ну, если в дебри не лезть, то ничего сложного

korvin_ ★★★★★
()
Ответ на: комментарий от cab

было бы хорошо, если бы кто-то сделал примеры на F# для этих лекций. Я начал делать для OCaml'а, но не было времени закончить - примеры доступны в отдельной ветке

ott ★★★★★
()
Ответ на: комментарий от archimag

>Про прокачивание мозга полный бред. Он (мозг) либо есть, либо его нет. Штанга здесь не поможет.

Про мозг либо есть, либо нет - полный бред. Если он есть изначально, но его не нагружают чем-то сложным - он усыхает, если изначальные данные средние, но есть тяга к знанием и упорство в их получении - мозг развивается. Штанга нужна :)

shuthdar ★★★
()
Ответ на: комментарий от shuthdar

Про мозг либо есть, либо нет - полный бред. Если он есть изначально, но его не нагружают чем-то сложным - он усыхает, если изначальные данные средние, но есть тяга к знанием и упорство в их получении - мозг развивается. Штанга нужна :)

Вообще-то, в возрасте, когда ФП становится интересным, достаточный интеллект уже либо есть, либо его нет. От обучения только зависит, как этот интеллект сможет применяться в той сфере, в которой происходит обучение. Так, какой-нибудь неграмотный, неговорящий Маугли, живущий в лесу с волками, может быть по интеллекту мощнее, чем хаскелист.

Говорят, что всё зависит от количества связей с в мозгу. А связи, типа, в основной своей массе устанавливаются в раннем детстве. После 25-ти умнее точно уже не станешь, мудрее, разве что ;)

mv ★★★★★
()
Ответ на: комментарий от shuthdar

> Изучая Хаскель, мозг прокачивается так, что осилить любой другой фунцкиональный язык не представляет проблемы - остаётся только вкурить разницу в синтаксисе.

Я так понимаю, тот же Хаскель и Лисп приходят в ФП разными путями — или из чистой теории (категорий, абстрактых типов, типизированных лямбд и прочего матана) — Хаскель, опускаясь из ФП в нечистые затычки вроде монад; либо из императивного «универсального» языка, вводя функции первого порядка, символьные вычисления и функциональные структуры данных вроде списков (и затычек вроде нечистых/деструктивных/недеструктивных функций) приходя к «сферическим функциональным структурам данных в вакууме» — Лисп.

То есть разница больше, чем в в синтаксисе — смотря какой предыдущий опыт, откуда начать проще.

Если всё равно откуда, наверно лучше начать с Hard Way — от Хаскелля.

Разумно сочетать голую теорию с практикой, книжками вроде Real World Haskell или Practical Common Lisp/ SICP/ Little Schemer/ OCaml «Using,Understanding, and Unraveling The OCaml Language» by Didier Remy (в последней вообще с места в карьер предлагают построить свой eval/apply, сделать call-by-X , вводят операционную семантику и Ocaml там идёт просто фоном, для иллюстрации)

anonymous
()
Ответ на: комментарий от anonymous

>Я так понимаю, тот же Хаскель и Лисп приходят в ФП разными путями

При желании, на Лиспе можно вообще не писать в функциональном стиле. Хаскелл, давая меньше свободы в выборе подходов, для изучения с нуля в итоге получается полезнее, если цель - изучение именно ФП.

shuthdar ★★★
()
Ответ на: комментарий от cab

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

cab ★★★★
()
Ответ на: комментарий от shuthdar

плюсадын. Мозг — это тот же компьютер, и для него точно так же справедливо Dreck In — Dreck Out, если забивать его чем попало.

Если он есть изначально, но его не нагружают чем-то сложным - он усыхает,


сначала он ищет себе занятие «по способностям». Паранойй, теории заговора, скандалы, интриги, расследования; политота; компиляции линукса, автомобили-самоделки, увлечение древнеэттрусским языком или функциональным программированием — это решение мозгом задачи «умище есть, а девать его некуда»

количество связей в мозгу


нейромедиаторы, ага, и привычка загружать моск чем-то нужным. Вон в соседнем топике пишут про «женский/мужской IQ», а им в контрпример можно привести ту же Marylin vos Savant с IQ over 9500. Хотя это сильно единичный случай, и можно попытаться утверждать про ситуацию в среднем/социальную среду/best practices. Такую среду под себя сам обладатель IQ и формирует.

anonymous
()
Ответ на: комментарий от rymis

>Сейчас совместно с женой слушаем курс F# от Сошникова Д.В. на intuit.ru.

Мудак он какой-то. Лектор из него - говнуэ.

anonymous
()
Ответ на: комментарий от mv

> Вообще-то, в возрасте, когда ФП становится интересным, достаточный интеллект уже либо есть, либо его нет. От обучения только зависит, как этот интеллект сможет применяться в той сфере, в которой происходит обучение. Так, какой-нибудь неграмотный, неговорящий Маугли, живущий в лесу с волками, может быть по интеллекту мощнее, чем хаскелист.

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

В общем, мутно и непонятно всё с интеллектом, хотя бы естественным. Одно только очевидно — интеллект штука социальная, начиная с какого-то этапа развития. Тогда скилл «прокачки мозга» становится зависимым от социальных скиллов :)

anonymous
()
Ответ на: комментарий от ott

Могу только на работе - дома дите к компьютеру ревнует

cab ★★★★
()
Ответ на: комментарий от mv

>> Кстати, Сошников когда-то был активным опенсорсником, у него даже свой дистрибьютив Линукса был, а теперь вот, евангелист Microsoft :)

Продажная сволочь!

Он стал мудрее.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Он стал мудрее.

Одно дело просто в микрософт пойти работать, другое - стать евангелистом. Это как самому себе изменить.

mv ★★★★★
()
Ответ на: комментарий от mv

Он действительно верит в то, чем занимается, я с ним как студент был знаком.

http://www.strf.ru/organization.aspx?CatalogId=356&d_no=24152

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

unsigned ★★★★
()
Ответ на: комментарий от unsigned

> Он действительно верит в то, чем занимается

man doublethink

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

А ты ожидал, он скажет «Microsoft больше платит»? %)

tailgunner ★★★★★
()
Ответ на: комментарий от shuthdar

> если изначальные данные средние, но есть тяга к знанием и упорство

в их получении - мозг развивается


Не надо верить в сказки. Ваш мозг дали вам мама с папой и от того как их гены скрестились уровень вашего интеллекта и зависит. Вы не можете на него повлиять, но вы можете решать, как им распоряжаться, что тоже не мало. Можно потратить всё своё время и энергию на изучение Haskell/Lisp/OCaml/Forth и т.п., знаний будет больше, но пользы никому они не принесут. А можно тратить своё время на создание реальных полезных программ и от этого всем будет польза. Есть знание, которое реально очевидно необходимо и полезно. Например, польза от изучение исходных кодов лучших программ или изучение современных технологий сомнения не вызывает. Изучение же языка на котором вы не собираетесь реально программировать (а в большинстве случаев с Haskell это именно так) - просто пустая трата времени, которого, увы, итак не шибко много.

archimag ★★★
()
Ответ на: комментарий от unsigned

В какой-то момент я понял, что технологии Microsoft технически очень хороши для образования.

Могу не согласиться. Во-первых, проприетарное вендовое ПО стоит денег, поэтому легально домой нищий студент себе его позволить не может. Opensource всё как-то лучше под линуксом/бзд работает, с вендой вечно какие-то проблемы.

Одна из киллер фич венды - мс оффис - для образования вообще ахтунг. Я учился на инженерной специальности, оформлять курсовики, пояснительные записки, диплом в нём кошмарно сложно. Подавляющая часть времени уходит на борьбу с форматированием. Средства автоматизации там тухлые, и их всё равно никто не использует. Другое дело - латех! В нём оформлять сложный текст - просто сказка!

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

Чертёжные программы под линуксом есть вполне нормальные, автокад для курсовиков всё равно оверкилл. CAD/CAM/CAE под юникс традиционно сильны. Правда, денег столько стоят, что заниматься с ними можно, разве что, в университете.

С точки зрения обучения программистов - ну, извините, для них open source - это бесплатные учебные пособия.

mv ★★★★★
()
Ответ на: комментарий от archimag

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


не сказки. развивается и еще как. но мама+папа однозначно дают исходный уровень.

atiyakkha
()
Ответ на: комментарий от jtootf

> мне подход оригамиста очень нравится, например. душевно так

А я кроме junior'ов и профессора ничего и не понял :)

tailgunner ★★★★★
()
Ответ на: комментарий от mv

> Чертёжные программы под линуксом есть вполне нормальные

названия?

CAD/CAM/CAE под юникс традиционно сильны.

дай пачку линков на сильные кады, или слов ключевых накидай...

Rastafarra ★★★★
()
Ответ на: комментарий от tailgunner

А я кроме junior'ов и профессора ничего и не понял :)

значит ты ещё не безнадёжен ;)

jtootf ★★★★★
()
Ответ на: комментарий от atiyakkha

> не сказки. развивается и еще как. но мама+папа однозначно

дают исходный уровень.


Хм, пример из шахмат. Ботвинник писал, что если шахматист не стал чемпионом мира в возрасте до 30 лет, то шансов завоевать этот титул после 30 очень мало, ибо после 30 счётные способности начинают увядать. Обычно ведущие гроссмейстеры достигают своей максимальной силы в достаточно раннем возрасте (между 20 и 30) и в последующем не заметно, что бы уровень их игры повышался (ну за исключением разве что Корчного, который вдруг под старость лет заиграл мощно и ярко, но это связано скорей с психологическими причинами, хотя может ему и правда не давали играть в СССР). А ведь гроссмейстеры постоянно нагружают свой мозг сложной интеллектуальной работой.

archimag ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.