;; Replicate lst cyclically to a list of the exact length lgt
(define (replicate-to-length lst lgt)
(reverse (replicate-to-length-1 lst lst '() 0 lgt)))
; Helping function to replicate-to-length.
; original-lst is constant through this function.
; The elements are taken out of lst.
; The result is accumulated up in res.
; count goes from 0 to lgt.
(define (replicate-to-length-1 original-lst lst res count lgt)
(cond ((null? lst) (replicate-to-length-1 original-lst original-lst res count lgt))
((< count lgt) (replicate-to-length-1 original-lst (cdr lst) (cons (car lst) res) (+ 1 count) lgt))
(else res)))