1(define (state->number state)2 (if (number? state)3 state4 (cond5 ((eq? state 'on) pkt-on)6 ((eq? state 'off) pkt-off)7 ((eq? state 'restore) pkt-restore)8 (else (error "unknown LED state")))))910(define (assoc->list asc)11 (fold (lambda (x ys)12 (let ((pair (assoc x asc)))13 (append ys14 (list (if pair15 (state->number (cdr pair))16 pkt-restore)))))17 '() (range num-leds)))1819(define (marshal asc)20 (define padding (make-list pkt-pad 0))2122 (list->u8vector23 (append24 (list pkt-hdr pkt-rw)25 (assoc->list asc)26 padding)))