cyclone/maze-get-set-root.scm
2017-07-10 13:26:30 +00:00

26 lines
759 B
Scheme

;;; MAZE -- Constructs a maze on a hexagonal grid, written by Olin Shivers.
(import (scheme base) (scheme read) (scheme write) (scheme time))
(define (get-set-root s)
(let lp ((r s));; Find the last pair
(let ((next (cdr r)));; in the list. That's
(cond ((pair? next) (lp next));; the root r.
(else
(if (not (eq? r s));; Now zip down the list again,
(let lp ((x s));; changing everyone's cdr to r.
(let ((next (cdr x)))
(cond ((not (eq? r next))
(set-cdr! x r)
(lp next))))))
r)))));; Then return r.
(write
(get-set-root '(
(a . 1)
(b . 2)
(c . 3)
(d . 4)
(e . 5)
)))