1.8 Managing Control Arrows: "arrow.ss"
The teachpack implements a controller for moving shapes across a canvass. A shape is a class of data for which move and draw operations can be drawn.
(control-left-right shape n move draw) → true  | 
shape : Shape  | 
n : number?  | 
Moves shape n pixels left (negative) or right (positive).
(control-up-down shape n move draw) → true  | 
shape : Shape  | 
n : number?  | 
Moves shape n pixels up (negative) or down (positive).
shape : Shape  | 
n : number?  | 
Moves shape N pixels left or right and up or down, respectively.
Example:
; A shape is a structure:  | 
; (make-posn num num)  | 
  | 
; RAD : the radius of the simple disk moving across a canvas  | 
(define RAD 10)  | 
  | 
; move : number shape -> shape or false  | 
; to move a shape by delta according to translate  | 
; effect: to redraw it  | 
(define (move delta sh)  | 
(cond  | 
[(and (clear-solid-disk sh RAD)  | 
(draw-solid-disk (translate sh delta) RAD))  | 
(translate sh delta)]  | 
  | 
; translate : shape number -> shape  | 
; to translate a shape by delta in the x direction  | 
(define (translate sh delta)  | 
(make-posn (+ (posn-x sh) delta) (posn-y sh)))  | 
  | 
; draw-it : shape -> true  | 
; to draw a shape on the canvas: a disk with radius  | 
(define (draw-it sh)  | 
(draw-solid-disk sh RAD))  | 
  | 
; RUN:  | 
  | 
; this creates the canvas  | 
(start 100 50)  | 
  | 
; this creates the controller GUI  | 
(control-left-right (make-posn 10 20) 10 move draw-it)  |