Menu
SICP Distilled

SICP Distilled

  • CC by-sa Licence
  • MSF Donate

Ch1 - Building Abstractions With Functions

  • Chapter 1 Distilled
  • Introduction
  • 1.1 - The Elements Of Programming
    • Expressions
    • Naming and the Environment
    • Evaluating Combinations
    • Defining New Functions
    • The Substitution Model
    • Exercises
    • Predicates
    • Conditional Expressions
    • Example: Newton’s Method
    • Functions as Black-Box Abstractions
  • 1.2 - Procedures and the Processes They Generate
    • Linear Recursion and Iteration
    • Tree Recursion
    • Orders of Growth
    • Exponentiation
    • Greatest Common Divisors
    • Example: Testing For Primality
  • 1.3 Higher Order Functions
  • Project - Blackjack

Ch2 - Building Abstractions With Data

  • Chapter 2 Distilled
  • Introduction
  • Data Abstraction
  • Everything From Nothing
  • Abstractions In Clojure
  • Clojure's Data Structures
  • Data Abstraction, Revisited
  • Escher
  • Project - Escher
  • Symbolic Data
  • Representing Sets
  • Huffman Encoding Trees
  • Zippers

Ch3 - Modularity, Objects, and State

  • Chapter 3 Distorted
  • Introduction
  • Concurrency in Clojure

Ch4 - Metalinguistic Abstraction

  • 4.1 - The Metacircular Evaluator
  • The Halting Problem
  • The Y Combinator
  • 4.2 - Lazy Evaluation
  • 4.3 - Nondeterministic Computing
  • 4.4 - Logic Programming

escher

Check out the code from Github

Gitter

Completing the project

  • Complete the vector functions

(you should be able to draw (frame-painter frame1) then)

  • Complete the path function

  • Define box, x, diamond and george (using segment-painter, you might want to use path as well)

Check by drawing them either with (draw <picture>) or (<picture> <frame>)

  • Complete flip-horiz, rotate, above

Check again that they each work and can be combined by (for instance)

(draw (above (beside george (flip-horiz george))
             (beside (rotate george) (flip-vert george))))
  • Complete up-split

  • Do the suggested refactor of right-split and up-split in terms of the split function

  • Complete image-painter

You should check out the docs for Quil transform

Extensions

  • Find some other escher tiles and see if you can capture the pattern of the orignal work with the functions we have

  • Check out this page from Frank Buss and see if you can use his tile shape for a perfect segment-painter Square Limit

Advanced, by which I mean I have not done it myself :-)

  • Can you do Circle Limit?

(Might want to search for 'escher hyperbolic')