fork download
  1. ; square pyramidal numbers
  2.  
  3. (define (range . args)
  4. (case (length args)
  5. ((1) (range 0 (car args) (if (negative? (car args)) -1 1)))
  6. ((2) (range (car args) (cadr args) (if (< (car args) (cadr args)) 1 -1)))
  7. ((3) (let ((le? (if (negative? (caddr args)) >= <=)))
  8. (let loop ((x (car args)) (xs (list)))
  9. (if (le? (cadr args) x) (reverse xs)
  10. (loop (+ x (caddr args)) (cons x xs))))))
  11. (else (error 'range "unrecognized arguments"))))
  12.  
  13. (define (sum xs) (apply + xs))
  14.  
  15. (define (square x) (* x x))
  16.  
  17. (define (sq-pyr n) (sum (map square (range 1 (+ n 1)))))
  18.  
  19. (display (sq-pyr 15)) (newline)
  20.  
  21. (define (sq-pyr n) (/ (+ (* 2 n n n) (* 3 n n) n) 6))
  22.  
  23. (display (sq-pyr 15)) (newline)
  24.  
  25. (display (sq-pyr 1000000)) (newline)
Success #stdin #stdout 0.01s 42848KB
stdin
Standard input is empty
stdout
1240
1240
333333833333500000