схема для объектно-ориентированных программистов - PullRequest
10 голосов
/ 14 декабря 2010

Я полностью заинтригован Scheme, и начал с некоторых примеров игрушечного программирования, и читаю книгу Пола Грэма On Lisp .

.

Одна вещь, которую я не смог найти, - это книга или веб-сайт, предназначенные для обучения Scheme "ОО-людям", то есть людям, подобным мне, которые сделали 99% своего кодирования на c ++ / Java / Python.

Я вижу, что замыкания являются своего рода object-y в том смысле, что они имеют локальное состояние и предлагают одну или несколько функций, которые имеют доступ к этому состоянию. Но я не хочу изучать Схему только для того, чтобы перенести на нее свои привычки. Вот почему я сейчас изучаю Scheme, а не Common Lisp; Я боюсь, что CLOS может просто служить опорой для моих существующих привычек ОО.

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

Любые педагогические выводы будут высоко оценены.

Ответы [ 4 ]

11 голосов
/ 16 декабря 2010

Я сомневаюсь, что CLOS послужит опорой для старых привычек, я обнаружил, что он довольно сильно отличается от стиля ОО в C ++ / Java / Python и очень интересен. Я не понимаю всех деталей, но я бы порекомендовал Практический Общий Лисп Питера Сейбела. Если вы читаете на Лиспе без особых проблем, вы сможете погрузиться в главы, посвященные CLOS в PCL. Кроме того, я бы порекомендовал ему Google Tech Talk , сравнивающий Java и Common Lisp.

Вот еще несколько рекомендаций, чтобы сделать этот ответ более полноценным:

Классический текст Структура и интерпретация компьютерных программ охватывает довольно много примеров в главе 3 построения модульных систем с использованием замыканий (и рассматривает проблемы с введением состояния и изменчивости). Глава 2 содержит некоторые общие и ориентированные на данные / тип программирования, которые могут быть полезны для мотивации изучения CLOS. Хотя эта книга действительно не нуждается в представлении, это возвышенная работа, и с весны я читаю ее медленно. Настоятельно рекомендуется, если вы заинтересованы в схеме.

Хотя SICP - отличная книга, она не лишена недостатков: действительно интересный взгляд на это - эссе «Структура и интерпретация учебного плана по информатике» , в котором подробно освещается критика SICP. и написано авторами Как разрабатывать программы (я не читал HTDP, но слышал, что это очень хорошо). Хотя это эссе не научит вас конкретно тому, что вы ищете - сравнивая функциональное и ОО-программирование, - в любом случае это действительно интересно. Их курс для начинающих студентов начинается с первого семестрового введения в функциональное программирование с использованием Scheme (я думаю, PLT / Racket) и заканчивается семестром ОО-программирования на C ++ или Java ... по крайней мере, это курс, который они описывают в эссе.

Эти слайды от Питера Норвига посвящены некоторым шаблонам проектирования, распространенным в ОО-программировании, и показывают, почему они отсутствуют или не нужны в динамических, функциональных языках, таких как Scheme и Lisp: http://norvig.com/design-patterns/

Я осторожно рекомендую книгу тех же авторов, что и книги Маленького Схемера: Маленькая Ява, Несколько образцов . Я не могу точно сказать, действительно ли это хорошая книга или нет, это было невероятно странно, и есть некоторые действительно плохие решения для набора текста (курсив, засечка, переменная ширина, верхний индекс не входит в текст по программированию) , но было бы интересно взглянуть на. В любом случае, вы можете найти это дешево. Не принимайте эту рекомендацию всерьез. Я думаю, что было бы лучше придерживаться текстов Схемы.

p.s. Я должен не согласиться с одним комментарием, утверждающим, что функциональное программирование не так сложно в ОО-программировании, я думаю, что это сильно искажает его. Функциональное программирование во всей его широте действительно ошеломляет. Когда вы выходите за рамки функций map / filter / redu и первоклассных функций и смотрите на другие вещи в функциональной сфере, такие как ленивая оценка, избегание побочных эффектов и мутаций, а также на сильные языки со статической типизацией, это становится довольно интересным, и, конечно, так же сложно, как традиционное OO программирование. Я только что поцарапал поверхность сам, но обнаружил множество новых идей. Программирование - сложный бизнес, будь то ОО или функциональный.

4 голосов
/ 14 декабря 2010

Поздравляю вас, мой друг! Люблю CS, люблю функциональное программирование.

Если вы являетесь разработчиком Python, на схему уйдет 3-4 дня

Вот лучший простой учебник, который я когда-либо встречал http://www.shido.info/lisp/idx_scm_e.html

Я нашел этот курс http://cs.gettysburg.edu/~tneller/cs341/scheme-intro/index.html, и он может быть полезен для вас

3 голосов
/ 15 декабря 2010

Один ресурс для начинающих, который очень полезен и очень ориентирован на случайного читателя, - «Приключения питониста в Схемеланде» .Он написан (очевидно) с точки зрения программиста на Python, делающего первые шаги в Scheme.Особенно приятно то, что он включает обзор текущих реализаций и проблем совместимости между каждой реализацией схемы, что, к сожалению, может вызвать некоторые головные боли, когда вы только начинаете.

Что касается объектасистемы, эти два документы (ссылка здесь ) дают хорошие примеры очень простых реализаций игрушек с использованием замыканий, которые я нашел полезными для понимания их использования в состоянии захвата.

2 голосов
/ 14 декабря 2010

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

...