rudus/sandbox.ld

42 lines
1.5 KiB
Plaintext
Raw Normal View History

& fn apply_command {
& "Takes a turtle state and a command and calculates a new state."
& (state, command) -> match command with {
& (:goto, (x, y)) -> assoc (state, :position, (x, y))
& (:home) -> do state >
& assoc (_, :position, (0, 0)) >
& assoc (_, :heading, 0)
& (:clear) -> do state >
& assoc (state, :position, (0, 0)) >
& assoc (_, :heading, 0)
& (:right, turns) -> update (state, :heading, add (_, turns))
& (:left, turns) -> update (state, :heading, sub (_, turns))
& (:forward, steps) -> {
& let #{heading, position, ...} = state
& let unit = heading/vector (heading)
& let vect = mult (steps, unit)
& update (state, :position, add (vect, _))
& }
& (:back, steps) -> {
& let #{heading, position, ...} = state
& let unit = heading/vector (heading)
& let vect = mult (steps, unit)
& update (state, :position, sub (_, vect))
& }
& (:penup) -> assoc (state, :pendown?, false)
& (:pendown) -> assoc (state, :pendown?, true)
& (:penwidth, pixels) -> assoc (state, :penwidth, pixels)
& (:pencolor, color) -> assoc (state, :pencolor, color)
& (:setheading, heading) -> assoc (state, :heading, heading)
& (:loadstate, position, heading, visible?, pendown?, penwidth, pencolor) -> #{position, heading, visible?, pendown?, penwidth, pencolor}
& (:show) -> assoc (state, :visible?, true)
& (:hide) -> assoc (state, :visible?, false)
& (:background, _) -> state
& }
& }
fn many_args (_, _, x, _) -> x
let fewer_args = many_args (:foo, :bar, _, :baz)
fewer_args(:quux)