; array rotation, again
(define (rotate x rotdist)
(define (swap a b m)
(do ((i 0 (+ i 1))) ((= i m) x)
(let ((t (vector-ref x (+ a i))))
(vector-set! x (+ a i)
(vector-ref x (+ b i)))
(vector-set! x (+ b i) t))))
(let ((n (vector-length x)) (p rotdist))
(let loop ((i p) (j (- n p)))
(cond ((= i j) (swap (- p i) p i) x)
((> i j) (swap (- p i) p j)
(loop (- i j) j))
(else (swap (- p i) (+ p j (- i)) i)
(loop i (- j i)))))))
(display (rotate '#(a b c d e f g h) 3)) (newline)
(display (rotate '#(d e f g h a b c) 5)) (newline)
(define (gcd i j)
(let loop ((i i) (j j))
(if (= i j) i
(if (> i j)
(loop (- i j) j)
(loop i (- j i))))))
(display (gcd 28 35)) (newline)
OyBhcnJheSByb3RhdGlvbiwgYWdhaW4KCihkZWZpbmUgKHJvdGF0ZSB4IHJvdGRpc3QpCiAgKGRlZmluZSAoc3dhcCBhIGIgbSkKICAgIChkbyAoKGkgMCAoKyBpIDEpKSkgKCg9IGkgbSkgeCkKICAgICAgKGxldCAoKHQgKHZlY3Rvci1yZWYgeCAoKyBhIGkpKSkpCiAgICAgICAgKHZlY3Rvci1zZXQhIHggKCsgYSBpKQogICAgICAgICAgKHZlY3Rvci1yZWYgeCAoKyBiIGkpKSkKICAgICAgICAodmVjdG9yLXNldCEgeCAoKyBiIGkpIHQpKSkpCiAgKGxldCAoKG4gKHZlY3Rvci1sZW5ndGggeCkpIChwIHJvdGRpc3QpKQogICAgKGxldCBsb29wICgoaSBwKSAoaiAoLSBuIHApKSkKICAgICAgKGNvbmQgKCg9IGkgaikgKHN3YXAgKC0gcCBpKSBwIGkpIHgpCiAgICAgICAgICAgICgoPiBpIGopIChzd2FwICgtIHAgaSkgcCBqKQogICAgICAgICAgICAgICAgICAgICAobG9vcCAoLSBpIGopIGopKQogICAgICAgICAgICAoZWxzZSAoc3dhcCAoLSBwIGkpICgrIHAgaiAoLSBpKSkgaSkKICAgICAgICAgICAgICAgICAgKGxvb3AgaSAoLSBqIGkpKSkpKSkpCgooZGlzcGxheSAocm90YXRlICcjKGEgYiBjIGQgZSBmIGcgaCkgMykpIChuZXdsaW5lKQooZGlzcGxheSAocm90YXRlICcjKGQgZSBmIGcgaCBhIGIgYykgNSkpIChuZXdsaW5lKQoKKGRlZmluZSAoZ2NkIGkgaikKICAobGV0IGxvb3AgKChpIGkpIChqIGopKQogICAgKGlmICg9IGkgaikgaQogICAgICAoaWYgKD4gaSBqKQogICAgICAgICAgKGxvb3AgKC0gaSBqKSBqKQogICAgICAgICAgKGxvb3AgaSAoLSBqIGkpKSkpKSkKCihkaXNwbGF5IChnY2QgMjggMzUpKSAobmV3bGluZSk=