我对Scheme完全感兴趣,并从一些玩具编程示例开始,并且正在阅读Paul Graham的On Lisp。
我找不到的一本书是一本旨在向“OO人”教授Scheme的书或网站,即像我这样的人,他们用c++/Java/Python完成了99%的编码。
我看到闭包在某种意义上是对象y,因为它们具有局部状态,并提供一个或多个可以访问该状态的函数。但是我不想学习Scheme只是为了将我现有的习惯移植到该方案上。这就是为什么我现在正在学习Scheme而不是Common Lisp的原因。我担心CLOS可能只是我现有的OO习惯的拐杖。
理想的是一本书或网站,提供以OO语言以及以Schemey方式在Scheme中解决问题的案例研究。我想我将非常感谢科学计算和/或计算机图形学问题,但是任何事情都会做。
任何教学线索将不胜感激。
最佳答案
我怀疑CLOS是否会成为旧习惯的拐杖,我发现它与C++/Java/Python中的OO风格完全不同,并且非常有趣。我不了解所有细节,但我会推荐彼得·塞贝尔(Peter Seibel)的《实践常见Lisp》。如果您在阅读Lisp时没有太多麻烦,那么您应该可以深入PCL中的the chapters introducing CLOS。另外,我建议他比较Java和Common Lisp的Google Tech Talk。
这里有一些其他建议,可以使这个答案更加完整:
经典文本Structure and Interpretation of Computer Programs涵盖了第3章中使用闭包构建模块化系统的许多示例(并解决了引入状态和可变性的问题)。第2章包括一些通用的和数据/类型导向的编程,它们可能有助于激发CLOS的研究。虽然这本书确实不需要介绍,但它是一项高大的工作,而且自 Spring 以来,我一直只是在慢慢地阅读它。如果您对Scheme感兴趣,强烈推荐。
尽管SICP是一本很棒的书,但它并非没有缺陷:对这些问题的真正有趣观察是"The Structure and Interpretation of the Computer Science Curriculum"文章,其中阐述了对SICP的一些批评,并由How to Design Programs的作者撰写(我没有读过HTDP。但我听说很好)。尽管本文不会专门教您寻找的内容-比较功能和OO编程-但还是很有趣。他们的新生本科类(class)从使用Scheme进行函数式编程的第一学期开始(我认为是PLT/Racket)开始,然后是使用C++或Java进行OO编程的一学期……至少这是他们在本文中描述的类(class)。
Peter Norvig的这些幻灯片介绍了OO编程中一些常见的设计模式,并说明了为什么它们在动态,功能性语言(例如Scheme和Lisp)中缺失或不必要:http://norvig.com/design-patterns/
我谨慎地推荐与Little Schemer的书作者相同的书:《小Java》,《少量模式》。我不能肯定地说这是否是一本好书,这是令人难以置信的奇怪,而且还有一些非常糟糕的排版决定(斜体,衬线,可变宽度,上标不属于编程文本) ,但是看一下可能会很有趣。无论如何,您可能会发现它很便宜。不要认真对待此建议。我认为最好坚持该计划的案文。
p.s.我必须不同意一条评论,即函数式编程在面向对象编程中并不那么复杂,我认为这完全是错误的。函数式编程的所有方面确实令人难以置信。当您不仅仅使用map/filter/reduce和一流的功能,并查看功能领域中的其他内容,例如惰性评估,避免副作用和变异以及强大的静态类型语言时,它会变得非常有趣,并且肯定和传统的OO编程一样复杂。我自己只是从头开始,但发现了很多新想法。编程是复杂的业务,无论是面向对象的还是功能性的。
关于oop - 面向对象程序员的方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4436351/