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

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

Единственное, чего мне не удалось найти, так это книги или веб-сайта, предназначенных для обучения Scheme «объектно-ориентированным людям», то есть людям вроде меня, которые написали 99% своего кода на C ++ / Java / Python.

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

Идеальным вариантом была бы книга или веб-сайт, предлагающий тематические исследования проблем, решаемых как на объектно-ориентированном языке, так и на Scheme в стиле Schemey. Полагаю, я был бы больше всего признателен за научные вычисления и / или проблемы с компьютерной графикой, но подойдет все, что угодно.

Будем очень признательны за любые педагогические рекомендации.


person SuperElectric    schedule 14.12.2010    source источник
comment
Не думаю, что ты найдешь такое. Когда большинство людей изучает новый язык, они пытаются изучить его с точки зрения этого языка, а не другого. Более того, ООП гораздо сложнее, чем функционально. Посмотрите The Little Schemer или SICP   -  person Rafe Kettler    schedule 14.12.2010
comment
Я сомневаюсь, что CLOS послужит опорой для старых привычек, я обнаружил, что он сильно отличается от стиля объектно-ориентированного программирования в C ++ / Java / Python и очень интересен. Я не понимаю всех деталей, но я бы порекомендовал Practical Common Lisp Питера Сейбеля. Если вы читаете On Lisp без особых проблем, вы сможете погрузиться в главы, знакомящие с CLOS в PCL. Кроме того, я бы порекомендовал его Google Tech Talk, сравнивающий Java и Common Lisp.   -  person michiakig    schedule 14.12.2010
comment
@Rafe Прочитав мой пост, вы обнаружите, что изучение Scheme с собственной точки зрения, без переноса моих шаблонов мышления OO, - это именно то, что я пытаюсь сделать. Я надеюсь запустить этот процесс, увидев примеры OO и Scheme решений одной и той же проблемы, особенно когда они выглядят очень по-разному.   -  person SuperElectric    schedule 14.12.2010
comment
Я думаю, это верная точка зрения. Именно из-за того, что объектно-ориентированный объект очень отличается, это может стать проблемой. В большинстве языков вы определяете классы, а затем определяете для них методы - Питер мудро меняет ситуацию и сначала выполняет общие функции, а в следующей главе defclass. Очевидно, это обычное место для программистов Lisp: xach.livejournal.com/275444.html   -  person Ken    schedule 14.12.2010
comment
Спасибо, @spacemanaki, за красивые ссылки. Если вы повторно разместите сообщение в качестве ответа, а не комментария, я бы выбрал его в качестве ответа на этот вопрос.   -  person SuperElectric    schedule 15.12.2010


Ответы (4)


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

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

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

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

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

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

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

person michiakig    schedule 15.12.2010

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

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

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

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

person Community    schedule 14.12.2010

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

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

person Evan    schedule 15.12.2010

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

person Vijay Mathew    schedule 14.12.2010