Подтвердить что ты не робот

Clojure для lisp неграмотных

Я - пожизненный объектно-ориентированный программист. Моя работа - это прежде всего развитие Java, но у меня есть опыт работы на нескольких языках. Руби дал мне первый реальный вкус функционального программирования. Мне нравились функции Ruby, заимствованные из функциональной парадигмы, такие как закрытие и продолжение. В конце концов, я закончил до Scala. Это был отличный способ постепенно научиться подходить к нетривиальным проблемам функциональным образом.

Теперь меня интересует Clojure. Я знаю все сексуальные функции, которые делают его заманчивым (программная транзакционная память, макросы и т.д.), Но я просто не могу привыкнуть к "мышлению в lisp". Я видел Rich Hickey screencasts, нацеленные на Java-программистов, но они направлены на объяснение языковых особенностей и не приближаются к реальным проблемам.

Я ищу любые советы или ресурсы, которые облегчили этот переход для других.

4b9b3361

Ответ 1

Мое первое знакомство с Lisp было: Парадигмы программирования искусственного интеллекта Петра Норвига. Это очень читаемое и мягкое введение во многие функции Common Lisp и концепций функционального программирования.

Запуск непосредственно с помощью Clojure книг может быть предпочтительным для вас, потому что существует несколько различия между Common Lisp и Clojure, которые могут запутаться, если вы пытаетесь учиться одновременно.

В то же время попробуйте получить опыт работы с Clojure REPL, выполняя некоторые упражнения как Project Euler, которые вы можете контрастировать с другими Clojure и настоятельными Java-решениями.

Кроме того, если у вас есть вопросы по программированию и идиоматическому стилю Clojure, не стесняйтесь обсуждать свой код с другими Clojurians. Это можно сделать несколькими способами: Clojure в группах Google, # clojure канал IRC на Freenode, Twitter через hashtag # clojure, и, конечно же, здесь на fooobar.com/questions/tagged/...!

Ответ 2

Теперь через 11 месяцев после того, как я изначально задал этот вопрос. Я только что начал новый проект, чтобы помочь новичкам перейти на clojure. Его называют 4clojure, и он бросает вызов вам решать интерактивные проблемы с заполнением в пустое.

Ответ 3

Отправляясь прямо к Clojure из ООП, я рекомендую только отличный Программирование Clojure Стюарта Хэллоуэй.

Мне это нравится, и он отлично справляется с большим количеством Clojure и справедливым набором функциональных программ в этом процессе.

The Little Schemer и SICP великолепны, но они не так важны для Clojure, если это то, что вы хотите изучить.

Ответ 4

Я бы рекомендовал получить версию MEAP The Joy из Clojure. У меня это есть, и сейчас MEAP предлагает в общей сложности 12 глав. Пока это лучшая книга, которую я когда-либо читал на языке программирования. В этих 12 главах вы можете начать с Clojure, вплоть до некоторых продвинутых тем. Текущая MEAP (которая часто получает обновления с новыми главами) в сочетании с ociweb Clojure учебник, stackoverflow.com и # clojure Канал IRC на freenode, я думаю, что все будет хорошо.

Хотя я согласен с тем, что программирование Clojure является отличным введением в Clojure и делает очень хорошую работу, мы не можем отрицать тот факт, что он становится все более и более устаревшим каждую неделю. Вы должны иметь в виду, что для Clojure 1.0 было написано программирование Clojure. Прямо сейчас мы быстро приближаемся к выпуску Clojure 1.2. Например, при включении defrecord структуры будут устаревшими.

Ответ 5

Для новичков, Как разработать программы, вы будете думать, как о Lisper. Если вы получаете нетерпение, пойдите быстрее:-) Еще одна хорошая книга В Lisp от Paul Graham, которая в качестве бонуса теперь бесплатна онлайн.

Мне не нужна структура и интерпретация компьютерных программ; если вы знаете Lisp или Scheme, это уже великий интеллектуальный тур и очень удовлетворительный, но мои ученики и я не нашли для него хорошей книги. У Little Schemer есть много хорошей информации, если вы можете попрактиковаться в своей диалектической организации и стиле cutesie-pie. Я  . Не может

Ответ 6

Мне очень нравится серия Brian Twill из Clojure видео на youtube как безболезненное введение в некоторые из идей Clojure. Они не предполагают больших знаний о Lisp или языках функционального программирования.

Что касается книг, я согласен с Исааком в том, что программирование Clojure - отличный ресурс. Вы можете также рассмотреть некоторые предстоящие книги на clojure:

Радость Clojure

Clojure в действии

Оба имеют ранний доступ, доступный онлайн, если вы покупаете сейчас. Также я думаю, что у обоих есть скидки - попробуйте посмотреть clojure.org.

Книги Lisp, о которых упоминают Питер и Норман, вероятно, являются хорошим выбором (мне нравится SICP, но я не читал других). Но различия в синтаксисе с Clojure могут немного расстроиться, если вы только начинаете. По этой причине я рекомендую начинать с Clojure -специфических книг в начале.

(Отредактировано для исправления ссылки.)

Ответ 7

Все ответы пока замечательные. Я бы добавил:

  • Purely Functional Retrogames - отличная серия о том, как создавать старые школьные видеоигры в функциональном свободном манере. Если вы поймете это и поймете, как писать Pac-Man без побочных эффектов, то вы пройдете долгий путь, чтобы побудить мышление, необходимое для решения многих/большинства других проблем функционально.
  • Halloway Программирование Clojure - лучшее общее введение в Clojure, и дает некоторое представление о том, как думать о проблемах в функциональным, а не объектно-ориентированным способом, особенно примером игры в змею.
  • Seibel Практическое общее Lisp - отличное практическое руководство для решения реальных задач функционально, например, создание базы данных. Хотя это написано для CL, а не Clojure, что позволяет изменять данные, концепции переносятся без особых изменений, а полный текст доступен онлайн бесплатно с веб-сайта автора. Стоит хотя бы взглянуть.

Ответ 8

Если вы ищете введение в "Lispy thinking", я бы рекомендовал [Practical Common Lisp] [1]. Это хорошее чтение и ИМХО идеально подходит для опытных программистов, исходящих из фона lisp.

Недостатком является то, что он нацелен на Common Lisp, а не Clojure; основной причиной является то, что Clojure гораздо более функциональен в своем подходе. Вероятно, вам понадобится также специальная книга Clojure.

[1]: http://www.gigamonkeys.com/book/ - полный текст в Интернете.