; crossing hands
(define (range . args)
(case (length args)
((1) (range 0 (car args) (if (negative? (car args)) -1 1)))
((2) (range (car args) (cadr args) (if (< (car args) (cadr args)) 1 -1)))
((3) (let ((le? (if (negative? (caddr args)) >= <=)))
(let loop ((x(car args)) (xs '()))
(if (le? (cadr args) x)
(reverse xs)
(loop (+ x (caddr args)) (cons x xs))))))
(else (error 'range "unrecognized arguments"))))
(define (sec->hms sec)
(let* ((h (quotient (floor sec) 3600))
(m (quotient (- (floor sec) (* h 3600)) 60))
(s (- sec (* h 3600) (* m 60))))
(list h m (round s))))
(for-each
(lambda (sec) (display (sec->hms sec)) (newline))
(map (lambda (s) (* s 43200 (/ 11))) (range 11)))