Рекомендация второй dnolen о том, чтобы схватить книгу С. Хэллоуэй (я ее купил, и это здорово) и изучать Clojure с места в карьер.
Я проделал свой путь (частично) через SICP некоторое время назад и действительно боролся. После этого я нашел Clojure приятным, возможно, потому, что у меня уже был некоторый опыт работы с Scheme. Тем не менее, особенно для тех, кто уже знаком с Java, я бы сказал, что круто прыгать прямо в Clojure. Обоснование:
- У вас есть удобный доступ ко всему API Java и всему телу библиотек, написанных для Java; например, недавно я построил графический интерфейс Swing для/из программы Clojure и использовал HTTP-компоненты Apache для совершения некоторых сетевых перехватов.
- Clojure пытается быть меньше «Lispy» по сравнению с другими Лиспах: Примерами могут служить:
- сокращение «ненужных» круглых скобках: например,
(cond (condition) (value) (condition) (value))
, а не
(cond ((condition) (value)) ((condition) (value)))
- использования нечто иное, чем скобки в нескольких значимых местах; например списки аргументов и привязки для
let
и loop
и т. д. находятся в квадратных скобках, а не в круглых скобках. Делает определения функций более легкими для чтения IMHO.
- список не является единственной структурой данных. Там хорошо интегрированы
- [векторы] (случайным образом доступная, как массивы) и
- {HashMaps};
Это облегчает жизнь, особенно если вы привыкли иметь их на Java.
- Функция для определения функций
(defn)
. Вы все должны это оценить;)
Рекомендованный первый учебник - Moxley Stratton's Clojure Tutorial. Там также огромный SO discussion on Clojure tutorials, который дает много ссылок.
Что-то, что я нашел чрезвычайно полезным с первых шагов в Clojure, было Clojure Cheat Sheet. Это касается общего случая, когда вы знаете, что вы хотите сделать, но не какую функцию использовать. Хотелось бы, чтобы другие языки приняли эту концепцию. Найдя вероятную функцию для ваших нужд, вы можете получить дополнительную документацию по ней, используя (doc <name>)
в Clojure REPL.
Ваш пробег может отличаться, конечно; но к тому времени, когда Amazon поставила Программирование Clojure Я уже достаточно усвоил Clojure из Интернета, что книга была скорее источником «большой картины», чем учебником для меня. Но, конечно, можно было бы сделать намного хуже, чем изучать программирование Clojure из этой книги.
Возможно, из сказанного выше я с энтузиазмом отношусь к Clojure. Я нахожу его освежающе отличающимся после многих лет Java, и достаточно мощный, чтобы выполнить все, что меня задевает. Я даже пожертвовал проект :)
С риском сожаления об этом позже, я также предлагаю (бесплатно) начало помощи Clojure и обучение по электронной почте, Google Chat или Wave. Мой адрес электронной почты должен быть довольно легко догадаться.
Если вы решили начать с PCL, вам может быть интересно упражнение С. Хэллоуэй портировать все упражнения программирования к Clojure: http://blog.thinkrelevance.com/2008/9/16/pcl-clojure –
У меня есть иррациональная аллергия ко всем вещам Java. Я буду придерживаться SBCL, хотя я рассматриваю ECL, чтобы я мог делать автономные исполняемые файлы. – Demosthenex
Идите, я переехал по оптовой продаже в Racket, потому что могу делать исполняемые файлы. – Demosthenex