Level 3 coding studies correspond to Vitruvia concepts 14 – 17.

## Reading

- Lists – learn about SML’s list datatype.
- Random Bricks – learn how to create artifacts whose bricks are randomly generated.

## Code-Along

- Wrapper functions – learn how to add functionality to function calls.
- Refactoring I – learn a variety of program manipulations including how to add parameters to functions as well as how to create a function that scales unit bricks.
- setMySpace2D – learn about the setMySpace2D function and how it can be used to create interlocking rings.
- Let-blocks and Val-Declarations – learn how to use let-blocks and val-declarations to improve code.
- Geometric patterns – learn how to use let-blocks and higher-order functions to create geometric patterns in a very concise manner.
- Geometric decomposition – learn how to create a geometric pattern using a top-down approach.

## Coding

- Concept 14 – This set of coding exercises focuses on constructing artifacts using the curried function
*put2D*which is parameterized on (1) the brick dimension (i.e., its shape), (2) the brick type (e.g., color), and (3) the coordinate where the brick is to be placed. It is through the parameterization of brick type that put2D provides the ability to “put” any of the supported bricks (over 70) in the xz-plane.

- Concept 15 – In Bricklayer, a 1x1x1 brick can be thought of as a large pixel that also has a physical manifestation. When using such “pixels” to draw lines, the jagged nature of lines becomes quite apparent. The algorithms used by “smooth” line drawing functions, while not overly complex, are never-the-less computationally intricate. This set of coding exercises focuses on constructin artifacts using the function
*lineXZ*. The exercises also give some appreciation of the semantic issues that must be confronted when drawing “smooth” lines.

- Concept 17 – Bricklayer provides the capability of controlling which rectangular regions within the virtual space can be updated by a function or program. This capability can be used to partition a virtual space into a set of sub-spaces. Multiple people interact with a virtual space by executing code in their own assigned sub-spaces. This allows for safe compositions of user code and provides an environment for interesting group coding projects.

## Special Projects

- Laces – explore and create a fractals constructed using seed shapes and stamping patterns.
- Space-filling curves – are fractals that have fascinating mathematical properties. Learn algorithms for creating Wunderlich curves and the Hilbert curve. Experiment with discovering (i.e., inventing) new space-filling curves.
- Weaving – experiment with using overwriting to create beautiful layered artifacts. From layering unexpected patterns can emerge.
- Graphs – explore how to create graphs having a large number of vertices and edges.