[ create a new paste ] login | about

Link: http://codepad.org/qd2PCeys    [ raw code | output | fork ]

programmingpraxis - Scheme, pasted on Feb 24:
; 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)))


Output:
1
2
3
4
5
6
7
8
9
10
11
(0 0 0)
(1 5 27)
(2 10 55)
(3 16 22)
(4 21 49)
(5 27 16)
(6 32 44)
(7 38 11)
(8 43 38)
(9 49 5)
(10 54 33)


Create a new paste based on this one


Comments: