# Exercises

### Flat Polygon

Using the Turtle methods, Range, and flatMap, rewrite your method to create a polygon. The signature of polygon is

def polygon(sides: Int, sideLength: Double): Image =
???

<div class="solution"> Using flatMap we can make the code more compact than the explicit structural recursion we had to use before.

def polygon(sides: Int, sideLength: Double): Image = {
val rotation = Angle.one / sides

Turtle.draw((1 to sides).toList.flatMap { n =>
List(turn(rotation), forward(sideLength))
})
}

</div>

### Flat Spiral

Using the Turtle methods, Range, and flatMap, rewrite your method to create the square spiral. The signature of squareSpiral is

def squareSpiral(steps: Int, distance: Double, angle: Angle, increment: Double): Image =
???

<div class="solution"> Again, the result is more compact than the previous implementation without flatMap. Isthis easier to read? I find it about the same. I belive comprehensibility is a function of familiarity, and we're (hopefully) by now becoming familiar with flatMap.

def squareSpiral(steps: Int, distance: Double, angle: Angle, increment: Double): Image = {
Turtle.draw((1 to steps).toList.flatMap { n =>
List(forward(distance + (n * increment)), turn(angle))
})
}

</div>

### L-System Art

In this exercise we want you to use your creativity to construct a picture of a natural object using your L-system implementation. You've seen many examples already that you can use an inspriation.