Loading

### 2Value Turtles

 (require graphics/value-turtles)

The value turtles are a variation on traditional turtles. Rather than having just a single window where each operation changes the state of that window, in the graphics/value-turtles library, the entire turtles window is treated as a value. This means that each of the primitive operations accepts, in addition to the usual arguments, a turtles-window value; instead of returning nothing, each returns a turtles-window value.

procedure

 (turtles width height [ init-x init-y init-angle]) → turtles?
width : real?
height : real?
init-x : real? = (/ width 2)
init-y : real? = (/ height 2)
init-angle : real? = 0
Creates a new turtles window with the given width and height. The remaining arguments specify position of the initial turtle and the direction in radians (where 0 is to the right).

 procedure(turtles? v) → boolean? v : any/c
Determines if v is a turtles drawing.

 procedure(move n turtles) → turtles? n : real? turtles : turtles?
Moves the turtle n pixels, returning a new turtles window.

 procedure(draw n turtles) → turtles? n : real? turtles : turtles?
Moves the turtle n pixels and draws a line along the path, returning a new turtles window.

 procedure(erase n turtles) → turtles? n : real? turtles : turtles?
Moves the turtle n pixels and erases a line along the path, returning a new turtles window.

 procedure(move-offset h v turtles) → turtles? h : real? v : real? turtles : turtles?
 procedure(draw-offset h v turtles) → turtles? h : real? v : real? turtles : turtles?
 procedure(erase-offset h v turtles) → turtles? h : real? v : real? turtles : turtles?
Like move, draw, and erase, but using a horizontal and vertical offset from the turtle’s current position.

 procedure(turn theta turtles) → turtles? theta : real? turtles : turtles?
Turns the turtle theta degrees counter-clockwise, returning a new turtles window.

 procedure(turn/radians theta turtles) → turtles? theta : real? turtles : turtles?
Turns the turtle theta radians counter-clockwise, returning a new turtles window.

 procedure(merge turtles1 turtles2) → turtles? turtles1 : turtles? turtles2 : turtles?
The split and tprompt forms provided by graphics/turtles aren’t needed for graphics/value-turtles, since the turtles window is a value.

Instead, the merge accepts two turtles windows and combines the state of the two turtles windows into a single window. The new window contains all of the turtles of the previous two windows, but only the line drawings of the first turtles argument.

 procedure(clean turtles) → turtles? turtles : turtles?
Produces a turtles like turtles, but with only a single turtle, positioned in the center.

#### 2.1Examples

 (require graphics/value-turtles-examples)

The graphics/turtle-examples library’s source is meant to be read, but it also exports the following examples.

 procedure(radial-turtles n turtles) → turtles? n : exact-nonnegative-integer? turtles : turtles?
Places 2n turtles spaced evenly pointing radially outward.

 procedure(spaced-turtles n turtles) → turtles? n : exact-nonnegative-integer? turtles : turtles?
Places 2n turtles evenly spaced in a line and pointing in the same direction as the original turtle.

 procedure(neato turtles) → turtles? turtles : turtles?
As the name says...

 procedure(regular-poly sides radius turtles) → turtles? sides : exact-nonnegative-integer? radius : real? turtles : turtles?
Draws a regular poly centered at the turtle with sides sides and with radius radius.

 procedure(regular-polys n s turtles) → turtles? n : exact-nonnegative-integer? s : any/c turtles : turtles?
Draws n regular polys each with n sides centered at the turtle.

 procedure(spokes turtles) → turtles? turtles : turtles?
Draws some spokes, using radial-turtles and spaced-turtles.

 procedure(spyro-gyra turtles) → turtles? turtles : turtles?
Draws a spyro-grya reminiscent shape.