; two easy tasks

(define range
  (case-lambda
    ((stop) (range 0 stop (if (negative? stop) -1 1)))
    ((start stop) (range start stop (if (< start stop) 1 -1)))
    ((start stop step)
      (let ((le? (if (negative? step) >= <=)))
        (let loop ((x start) (xs (list)))
          (if (le? stop x) (reverse xs)
            (loop (+ x step) (cons x xs))))))
    (else (error 'range "too many arguments"))))

(display (filter
    (lambda (n)
      (and (zero? (modulo n 13))
           (zero? (modulo n 17))))
    (range 500)))
(newline)

(define (f n)
  (let* ((m (+ #e1e9 7)) (n (modulo n m)))
    (modulo (* n (+ n 1) 1/2) m)))

(display (f 1234567)) (newline)