Схема для объектно-ориентированных программистов

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

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

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

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

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

Ответ 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 или функциональный.

Ответ 2

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

Если вы являетесь разработчиком python, то подумайте в схеме

3-4 дня,

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

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

Ответ 3

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

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

Ответ 4

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