Ответ 1
Я сомневаюсь, что CLOS будет служить костылем для старых привычек, я обнаружил, что он очень отличается от стиля OO в С++/Java/Python и очень интересен. Я не понимаю всех подробностей, но я бы порекомендовал Питера Зайбеля Практический Общий Lisp. Если вы читаете On Lisp без особых проблем, вы сможете погрузиться в главы, представляющие CLOS в PCL. Кроме того, я бы рекомендовал его Google Tech Talk сравнить Java и Common Lisp.
Вот еще несколько рекомендаций, чтобы сделать этот более полноценный ответ:
Классический текст Структура и интерпретация компьютерных программ содержит довольно много примеров в главе 3 построения модульных систем с использованием закрытий (и устраняет проблемы с введением состояния и изменчивости), Глава 2 включает в себя некоторые общие и ориентированные на данные/типы программы, которые могут быть полезны для мотивации изучения CLOS. Эта книга действительно не нуждается в представлении, но это потрясающая работа, и я только читал ее медленно со времен spring. Очень рекомендуется, если вас интересует схема.
В то время как SICP - отличная книга, это не без его недостатков: действительно интересный взгляд на них - эссе Структура и интерпретация учебной программы в области компьютерных наук в котором подробно рассматривается несколько критических замечаний по SICP и написана авторами" Как разрабатывать программы" (я не читал HTDP, но я слышал, что это очень хорошо). Хотя это эссе не научит вас конкретно тому, что вы ищете - сравнение функционального и OO-программирования - это действительно интересно в любом случае. Их курс для начинающих начинается с введения первого семестра в функциональное программирование с использованием Scheme (я думаю, PLT/Racket), за которым следует семестр программирования OO с С++ или Java... по крайней мере, тот курс, который они описывают в эссе.
Эти слайды от Peter Norvig описывают некоторые шаблоны проектирования, общие для программирования OO, и показывают, почему они отсутствуют или не нужны в динамических функциональных языках, таких как Scheme и Lisp: http://norvig.com/design-patterns/
Я осторожно рекомендую книгу тем же авторам, что и книги Little Schemer: Маленькая Java, несколько шаблонов. Я не могу точно сказать, действительно ли это хорошая книга или нет, это было невероятно странно, и есть некоторые очень плохие правила набора текста (курсив, серифа, переменная ширина, надстрочный шрифт не входит в текст при программировании), но может быть интересно взглянуть. В любом случае, вы можете найти его дешевым. Не относитесь к этой рекомендации серьезно. Я думаю, было бы лучше придерживаться текстов Схемы.
p.s. Я должен не согласиться с одним комментарием, заявив, что функциональное программирование не так сложно при программировании OO, я думаю, что это грубо ошибочно. Функциональное программирование во всей его полноте поистине ошеломительно. Когда вы выходите за рамки карт/фильтров/сокращений и первоклассных функций, и смотрите на другие вещи в функциональной сфере, как ленивая оценка, избегая побочных эффектов и мутаций, а также сильные, статические типизированные языки, это становится довольно интересным, и, безусловно, так же сложно, как и традиционное программирование OO. Я только что сам поцарапал поверхность, но обнаружил много новых идей. Программирование - это сложный бизнес, будь то OO или функциональный.