Structure & Interpretation Of Computer Programs
Structure and Interpretation of Computer Programs
by Harold Abelson
There are new implementations of most of the major programming systems in the book, including the interpreters and compilers, and the authors have incorporated many small changes that reflect their experience teaching the course at MIT since the first edition was published.
A new theme has been introduced that emphasizes the central role played by different approaches to dealing with time in computational models: objects with state, concurrent programming, functional programming and lazy evaluation, and nondeterministic programming. There are new example sections on higher-order procedures in graphics and on applications of stream processing in numerical programming, and many new exercises.
In addition, all the programs have been reworked to run in any Scheme implementation that adheres to the IEEE standard.
Instructor’s Manual to Accompany Structure and Interpretation of Computer Programs
by Julie Sussman, Harold Abelson, Gerald Jay Sussman
This instructor’s manual and reader’s guide accompanies the secondedition of Structure and Interpretation of Computer Programs, by Harold Abelson and Gerald Jay Sussman with Julie Sussman.
This instructor’s manual and reader’s guide accompanies the second edition of Structure and Interpretation of Computer Programs, by Harold Abelson and Gerald Jay Sussman with Julie Sussman. It contains discussions of exercises and other material in the text as well as supplementary material, additional examples and exercises, and teaching suggestions. An appendix summarizes the Scheme programming language as used in the text, showing at what point in the text each element of Scheme is introduced.
The Reasoned Schemer
by Daniel P. Friedman, William E. Byrd, Oleg Kiselyov, Jason Hemann
A new edition of a book, written in a humorous question-and-answer style, that shows how to implement and use an elegant little programming language for logic programming.
The goal of this book is to show the beauty and elegance of relational programming, which captures the essence of logic programming. The book shows how to implement a relational programming language in Scheme, or in any other functional language, and demonstrates the remarkable flexibility of the resulting relational programs. As in the first edition, the pedagogical method is a series of questions and answers, which proceed with the characteristic humor that marked The Little Schemer and The Seasoned Schemer. Familiarity with a functional language or with the first five chapters of The Little Schemer is assumed.
For this second edition, the authors have greatly simplified the programming language used in the book, as well as the implementation of the language. In addition to revising the text extensively, and simplifying and revising the “Laws” and “Commandments,” they have added explicit “Translation” rules to ease translation of Scheme functions into relations.
Structure and Interpretation of Classical Mechanics
by Gerald Jay Sussman, Jack Wisdom
The new edition of a classic text that concentrates on developing general methods for studying the behavior of classical systems, with extensive use of computation.
We now know that there is much more to classical mechanics than previously suspected. Derivations of the equations of motion, the focus of traditional presentations of mechanics, are just the beginning. This innovative textbook, now in its second edition, concentrates on developing general methods for studying the behavior of classical systems, whether or not they have a symbolic solution. It focuses on the phenomenon of motion and makes extensive use of computer simulation in its explorations of the topic. It weaves recent discoveries in nonlinear dynamics throughout the text, rather than presenting them as an afterthought. Explorations of phenomena such as the transition to chaos, nonlinear resonances, and resonance overlap to help the student develop appropriate analytic tools for understanding. The book uses computation to constrain notation, to capture and formalize methods, and for simulation and symbolic analysis. The requirement that the computer be able to interpret any expression provides the student with strict and immediate feedback about whether an expression is correctly formulated.
This second edition has been updated throughout, with revisions that reflect insights gained by the authors from using the text every year at MIT. In addition, because of substantial software improvements, this edition provides algebraic proofs of more generality than those in the previous edition; this improvement permeates the new edition.
How to Design Programs
by Matthias Felleisen, Robert Bruce Findler, Shriram Krishnamurthi, Matthew Flatt
This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills–critical reading, analytical thinking, creative synthesis, and attention to detail–that are important for everyone, not just future computer programmers. The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners. The environment grows with the readers as they master the material in the book until it supports a full-fledged language for the whole spectrum of programming tasks.
All the book’s support materials are available for free on the Web. The Web site includes the environment, teacher guides, exercises for all levels, solutions, and additional projects.
A second edition is now available.
Structure and Interpretation of Computer Programs – 2nd Edition
by Harold Abelson , Gerald Jay Sussman, Julie Sussman
Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Jay Sussman is licensed under a Creative Commons Attribution-NonCommercial 3.0 License.
by Brian Harvey, Matthew Wright
Beginners will find the authors’ approach sophisticated yet conversational and unintimidating. Using Scheme, a modern dialect of Lisp, they teach fundamental ideas and concepts of computer science — composition of functions, function as object, recursion, abstraction (data abstraction and procedural abstraction), and sequential (non-functional) techniques — in a way that avoids confusing technical pitfalls. Interesting nonmathematical programming examples use words and sentences as data; practical examples are represented by miniature spreadsheet and database programs.
Simply Scheme devotes five chapters to recursion, presenting distinct ways for readers to think about this watershed idea. There is also a chapter on file input/output, and students are able to work on substantial, realistic programming projects in the first semester.
Compared to Pascal- or C-based texts, Simply Scheme has many advantages in its use of the Scheme programming language. Scheme is interactive and allows for ease of program development and debugging; its first-class functions and automatic storage allocation provide a high level of abstraction so that programmers can concentrate on the desired goal instead of on the computer; its simple, uniform syntax doesn’t take up months of class time.
Simply Scheme differs from other Scheme-based books in its detailed and thorough exploration of the beginning steps in computer science. In addition to its emphasis on recursion, it also explores higher-order procedures and trees in depth, leaving object-oriented programming and the more difficult environment model for a later course. Simply Scheme extends the standard Scheme language with word and sentence data types to make symbolic programming easier for beginners. It also features a series of large sample programs and a series of suggested large programming projects.
Download the program files for use with the book
Paradigms of Artificial Intelligence Programming
by Peter Norvig
Paradigms of AI Programming is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.
Concepts, Techniques, and Models of Computer Programming
by Peter Van-Roy, Seif Haridi
Teaching the science and the technology of programming as a unified discipline that shows the deep relationships between programming paradigms.
This innovative text presents computer programming as a unified discipline in a way that is both practical and scientifically sound. The book focuses on techniques of lasting value and explains them precisely in terms of a simple abstract machine. The book presents all major programming paradigms in a uniform framework that shows their deep relationships and how and where to use them together. After an introduction to programming concepts, the book presents both well-known and lesser-known computation models (“programming paradigms”). Each model has its own set of techniques and each is included on the basis of its usefulness in practice. The general models include declarative programming, declarative concurrency, message-passing concurrency, explicit state, object-oriented programming, shared-state concurrency, and relational programming. Specialized models include graphical user interface programming, distributed programming, and constraint programming. Each model is based on its kernel language–a simple core language that consists of a small number of programmer-significant elements. The kernel languages are introduced progressively, adding concepts one by one, thus showing the deep relationships between different models. The kernel languages are defined precisely in terms of a simple abstract machine. Because a wide variety of languages and programming paradigms can be modeled by a small set of closely related kernel languages, this approach allows programmer and student to grasp the underlying unity of programming. The book has many program fragments and exercises, all of which can be run on the Mozart Programming System, an Open Source software package that features an interactive incremental development environment.
Structure and Interpretation of Classical Mechanics
by Gerald Jay Sussman, Jack Wisdom, Meinhard Edwin Mayer
This textbook takes an innovative approach to the teaching of classical mechanics, emphasizing the development of general but practical intellectual tools to support the analysis of nonlinear Hamiltonian systems. The development is organized around a progressively more sophisticated analysis of particular natural systems and weaves examples throughout the presentation. Explorations of phenomena such as transitions to chaos, nonlinear resonances, and resonance overlaps to help the student to develop appropriate analytic tools for understanding. Computational algorithms communicate methods used in the analysis of dynamical phenomena. Expressing the methods of mechanics in a computer language forces them to be unambiguous and computationally effective. Once formalized as a procedure, a mathematical idea also becomes a tool that can be used directly to compute results.
The student actively explores the motion of systems through computer simulation and experiment. This active exploration is extended to the mathematics. The requirement that the computer be able to interpret any expression provides strict and immediate feedback as to whether an expression is correctly formulated. The interaction with the computer uncovers and corrects many deficiencies in understanding.