18 lines
581 B
Plaintext
18 lines
581 B
Plaintext
(lib 'list) ;; list-rotate
|
|
|
|
;; a list is a rep-list if equal? to itself after a rotation of lam units
|
|
;; lam <= list length / 2
|
|
;; truncate to a multiple of lam before rotating
|
|
;; try cycles in decreasing lam order (longest wins)
|
|
|
|
(define (cyclic? cyclic)
|
|
(define len (length cyclic))
|
|
(define trunc null)
|
|
|
|
(if (> len 1)
|
|
(for ((lam (in-range (quotient len 2) 0 -1)))
|
|
(set! trunc (take cyclic (- len (modulo len lam))))
|
|
#:break (equal? trunc (list-rotate trunc lam)) => (list->string (take cyclic lam))
|
|
'no-rep )
|
|
'too-short-no-rep))
|