Несколько вопросов по Scheme и языкам функционального программирования?
=========================================================================

 Заинтересовался изучением функциональным программированием. В частности интересуют языки Scheme, Clojure, Erlang и Scala. Также часто слышал, что наиболее мощный ФП язык - хаскель, но подозреваю, что он достаточно сложен для новичка. Поэтому возникли следующие вопросы:  
  

1. Какой из функциональных языков проще всего для изучения? Scheme подойдет?  
  

2. Каковы области применения Scheme (кроме академического и fu-script для GIMP'а)? И какие диалекты Scheme наиболее популярны-актуальны, кроме Racket?   
  

3. Clojure, Erlang, Scala - какой из них более популярен в девелопменте, в частности под веб?  
  

4. Насколько часто применяется функциональная парадигма в Python? или питон все-таки объектно-ориентирован на столько, что функциональную парадигму в нем обычно не применяют?  
  

Какую функциональщину вы бы посоветовали новичку в данной области? 

 Смотря какую цель ты ставишь перед собой. Обычно подбирают инструмент под задачу, а не наоборот. Изучать ради изучения - не самая лучшая идея. Но знать основы функциональщины никогда не повредит.   

Да и важно понимать, что в функциональном стиле можно писать практически на любых языках, а не только на чисто функциональных.  
  

1) Схема очень проста, но непривычна. Прочитай SICP, отличная книга по программированию в целом.  

2) Почти никаких. Так уж вышло, что она не особо популярна в прикладных областях. Ну а в самом Racket можно выбирать разные диалекты, посмотри там.  

3) Эрланг, в силу устройства самой платформы, отлично подходит для быстрых асинхронных сетевых приложений (и никакого коллбечного ада). Для скалы есть хорошие веб-фреймворки: Play 2, Lift, etc. Для кложы не так много, но последние 2 - это JVM, соответственно, можно использовать многие Java-либы.  

4) Питон никуда не ориентирован. Что мешает комбинировать разные парадигмы? Просто в питоне всё есть объект. Это облегчает ООП, да. Многие типы данных там мутабельны. Но и функциональный подход там тоже часто применяют (декораторы, например - частое явление). Map'в и reduce'ы тоже присутствуют, плюс, есть целый пакет functools. И numpy.  
  

В общем, почитай SICP =) 

 Может не совсем по вопросам отвечу:  

из этого списка изучал Clojure и Scala, ну и Racket немного. Оба вполне годные для повседневного применения. Оба JVM-hosted языки. На Clojure вполне можно писать как web, так и на Android. На Scala пытался что-то по Web ковырять. Советую оба, ну или любой из них. 

 Scheme используется в "Инфосистемах Джет" - на ней (Racket) написан один из продаваемых ими продуктов. Но сейчас там больше используют Scala. Еще я видел примеры скриптов для какого-то САПРа для микроэлектроники (в распечатке руководства приводились примеры на TCL и Scheme). Есть достаточно пощный форматер SGML (и XML) - DSSSL с входным языком, близким к Schema.  

Пожалуй это все, что можно сказать про Scheme. Язык очень приятный, но учить его можно только just for fun или чтения SICP. Применить на практике врядли удасться.  
  

У Erlang есть достаточно специфическая область - телеком. Так же его активно применяют для распределения видеопотоков. Есть мощные фреймвоки для web, например Zotonic. Почему он мало применяется в других областях (он бы хорошо подошел для робототехники и корпоративных приложений) я не понимаю.  
  

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

Про Clojure слышал про ее применение в анализе данных. Но язык приятный и может быть применен вместе с Java (или даже со Scala).  
  

Еще стоит обратить внимание на F#. .NET платформа активно развивается, а этот язык мощный и не слишком сложный.