fork download
  1. ; array rotation, again
  2.  
  3. (define (rotate x rotdist)
  4. (define (swap a b m)
  5. (do ((i 0 (+ i 1))) ((= i m) x)
  6. (let ((t (vector-ref x (+ a i))))
  7. (vector-set! x (+ a i)
  8. (vector-ref x (+ b i)))
  9. (vector-set! x (+ b i) t))))
  10. (let ((n (vector-length x)) (p rotdist))
  11. (let loop ((i p) (j (- n p)))
  12. (cond ((= i j) (swap (- p i) p i) x)
  13. ((> i j) (swap (- p i) p j)
  14. (loop (- i j) j))
  15. (else (swap (- p i) (+ p j (- i)) i)
  16. (loop i (- j i)))))))
  17.  
  18. (display (rotate '#(a b c d e f g h) 3)) (newline)
  19. (display (rotate '#(d e f g h a b c) 5)) (newline)
  20.  
  21. (define (gcd i j)
  22. (let loop ((i i) (j j))
  23. (if (= i j) i
  24. (if (> i j)
  25. (loop (- i j) j)
  26. (loop i (- j i))))))
  27.  
  28. (display (gcd 28 35)) (newline)
Success #stdin #stdout 0.04s 8272KB
stdin
Standard input is empty
stdout
#(d e f g h a b c)
#(a b c d e f g h)
7