LINUX.ORG.RU

Функциональное программирование - с чего начать?


2

4

Захотелось изучить эту штуку... Читал статейку на википедию, и ещё несколько статеек, но как-то не особенно понял, и не особо проникся.

С чего вообще начать, если полный 0 в этом? Какой язык выбрать? И какую книжку почитать? Желательно на русском языке.

До этого немного соображал в структурном программировании, и ООП почуть совсем.

> С чего вообще начать, если полный 0 в этом? Какой язык выбрать? И какую книжку почитать? Желательно на русском языке.

По Haskell есть пара книг на русском, но названия не скажу. Он мне не особо приглянулся.

Можешь поискать книги по F#(в английском в сети есть 100%). Есть перевод Programming F# и книга Д.Сошникова. Правда не уверен в наличии их в электронном виде.

По лиспу: SICP или PCL, а лучше(имхо) - Мир лиспа(двухтомник).

По Erlang есть: https://groups.google.com/forum/#!forum/russian-armstrong-erlang

По scala\clojure, на сколько мне известно, только на английском, но читаются достаточно легко.

п.с. можешь полистать http://fprog.ru/ там были введения в F# и clojure, если я не ошибаюсь.

Norgat ★★★★★
()

С установки ghc и emacs +настройка. Чтение «Мягкое введение в Haskell»/статейки на habrahabr

tn1
()

Я не шарю, он оценивая информационный фон - надо курить Хаскель, это типа круто и всё такое.

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

а с какого языка всё-таки лучше начать? я же не буду читать все эти книги параллельно? %)

тут все вроде рекомендуют haskell...

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

> хабре не претендуют на полноту.
Как затравка. Потом Душкин Р. В. Функциональное программирование на языке Haskell

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

[quote]а с какого языка всё-таки лучше начать? я же не буду читать все эти книги параллельно? %)

тут все вроде рекомендуют haskell...[/quote]

Я начинал с Haskell, чего и тебе советую. Всётаки он располагает к функциональному подходу. А когда разберёшься с основами Haskell - покури Lisp(как минимум для сравнения подходов). Уже после этого можно выбрать конкретный язык(если хочешь юзать ФП не только для своих собственных программ). Благо сейчас выбор большой F#, Scala, Clojure, Nemerle, Erlang, да и Common Lisp'ы живут. Хотя это лишь мой взгляд на ФП.

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

> Я начинал с Haskell, чего и тебе советую.

По Haskell есть пара книг на русском, но названия не скажу. Он мне не особо приглянулся.

Он мне не особо приглянулся.

Но начать с _него_ всё-таки стоит? %)

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

> Но начать с _него_ всё-таки стоит? %)

Я бы сказал - да, стоит. Он мне помог сломать в голове императивные шаблоны. После того, как разобрался немного(аля, как делать простые задачки не циклами, а рекурсией и заюзом map\filter\fold) - пересел на F#.

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

http://forum.codenet.ru/threads/56865-Haskell-%D1%83%D1%87%D0%B5%D0%B1%D0%BD%...

Вот сборка ссылок по Haskell. Полистай весь раздел, там ещё топики со ссылками есть.

П.С. Если ты не знаешь emacs - не пытайся пересесть за него и учить Haskell одновременно. В начале лучше немного повозиться без него, т.к. настройка emacs до удобного состояния дело тоже не совсем тривиальное, да и привычка нужна))

Norgat ★★★★★
()

начинать надо с теории а именно курса типизированного лямбда исчисления а уж потом как осилишь можно и практиковать.

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

> начинать надо с теории а именно курса типизированного лямбда исчисления а уж потом как осилишь можно и практиковать.

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

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

> выкинуть нахер и таки SICP.

Сколько людей, столько и мнений. По мне, так SICP скучная, а Мир Лиспа, хоть читать интерестно.

Norgat ★★★★★
()

> Желательно на русском языке.

Лучше вообще не начинать в таком случае.

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

> По мне, так SICP скучная, а Мир Лиспа, хоть читать интерестно.

Вы странный человек

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

Потом Душкин Р. В. Функциональное программирование на языке Haskell

oh noes

jtootf ★★★★★
()

поставь себе задачу, начни решать, параллельно читая LYHFGG.

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

Real World Haskell

Начинать с нее не стоит. Тем более после «читал статейку на википедию».

Лучше начать с книги Programming in Haskell, Graham Hutton-a.. Там же есть и видео лекции по книге. Затем уже можно читать Real World Haskell. Затем читаем Haskell language and library specification (pdf).

Прочитали? Язык знаем, но программировать еще не умеем. Значит читаем Purely Functional Data Structures и Pearls of Functional Algorithm Design. Еще рекомендуют вот это, но я не читал.

Грызем гранит святого Хацкелла дальше:
Communicating Haskell Processes
Developing a High-Performance W eb Server in Concurrent Haskell
Parallel and Concurrent Programming in Haskell

Всё мы готовы к тому, чтобы прочитать книгу Write Yourself a Scheme in 48 Hours. Собственно, делаем все упражнения из нее, пишем собственную реализацию схемы, и уже потом читаем SICP.

Прозрение. Успех. Толпы фанатов.

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

>почему SICP в самом конце?

Ирония. Сарказм. Шелдонизм.

А если серьезно, то да, начинать надо с SICP, но можно еще HTDP перед ним почитать

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

> По мне, так SICP скучная, а Мир Лиспа, хоть читать интерестно.

Читать-то интересно, но там примеры на таком древнем диалекте Лиспа, что...а впрочем, адаптация примеров послужит неплохим учебным заданием :)

Не сказал бы, что SICP скучная. Но даже если и скучная, то весьма информативная для начинающего.

А «Learn You A Haskell for Great Good!» ещё не предлагали? Правда она на английском...

OldFatMan
()

Нам в универе читали OCaml (M$ его себе взяла и обозвала F#, прикрутив при этом к .net) - писать довольно легко, принципы понять можно. Начать с... изучения рекуисии и патерн матчинга :)

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

> SICP

Читать-то интересно, но там примеры на таком древнем диалекте Лиспа, что...

А что? На R5RS все работает.

По поводу PCL, Мир лиспа и т.д. - это ж все про Common Lisp. Где вы в CL ФП нашли? CL это CLOS в первую очередь и макросы во вторую.

no-such-file ★★★★★
()
Ответ на: комментарий от anonymous

По OCaml'у есть отличная книжка Practical O'Caml издательства APress. Из той же серии, что PCL.

no-such-file ★★★★★
()

>> С чего вообще начать, если полный 0 в этом?

Может быть, со Scheme? Можно и Хаскелль, но Scheme как-то дружелюбнее и вроде бы даёт те же основы. Если что, ни на одном функциональном языке не пишу и знаком с ними весьма условно.

GotF ★★★★★
()

«Learn You a Haskell for the Greater Good». А если ничего не понять - книга Барендрегта.

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

Можно с нее начинать. Достаточно простая книжка, все подробно объясняет.

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

>> Желательно на русском языке.

Лучше вообще не начинать в таком случае.

Простите, живу в Рашке, говорю на русском, пишу на русском, читаю на русском. Грешен.

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

Проучился три года (один остался, бакалавр) на компьютерной специальности - нам ничего вообще из функциональных языков не читали. 90% одногруппников не знают, что это вообще такое, я уверен.

В печали. %(

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

По Эрлангу книжек не так много.

1. ERLANG Programming by Cesarini - Основы языка
2. Erlang and OTP in Action - Уже про OTP Framework(или правильнее сказать collection of libraries)

Вместо книги от Cesarini, многие рекомендуют эту книгу от Армстронга, но у меня она пошла намного сложнее.

Плюс по Эрлангу есть 10500 видео тут

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

говорю на русском, пишу на русском, читаю на русском.

Никогда не позно начать исправляться :-)

Begemoth ★★★★★
()

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

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

Какая вот разница в том, матерится юзер или не матерится на софтину вашу? Он от этого её юзать перестаёт что-ли? На винду многие матерятся, а юзает всё равно большинство. Микрософту какое дело до того, на чём винда написана - на С++ или на хаскеле? Ваще пох до тех пор, пока продажи идут. Полезно понимать вообще всё, разные парадигмы и т.п. и т.д. Но чтобы понимать функциональное программирование, не надо на нём рвать жопу, надо просто позвать хаскелиста на чай и основные ништяки он выдаст. Скажет про всякие монады и про то, что «всё-функция» (как в юниксе - «всё - файл»). Это даст какие-то размышленческие начала в вас и вы подумаете об этом. Необязательно при этом уметь на хаскелях кодить, есть же разные задачи... В некоторых задачах может быть ситуация «а накуя мне, чтобы всё было функцией?». И понтов в этом во всём много и «процессности» - т.е. кайфа от професса, безотносительно к результату, который всегда один - процесс, потоки, память, стек... Ничё не поменяется.

kiverattes ★☆
()

имхо, не нужно начинать с малораспространённых языков. лучше сразу выбрать Python и видеть плоды своего труда.

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