k文字版

こんなんでいいのかな?
3文字版とほとんど同じだけど

(use srfi-1)
(use util.combinations)   ; Gauche

(define (k-letters lst k)
  (define (ok? lst)
    (if (null? (cdr lst)) #t
	(if (equal? (take (cdr (car lst)) (- k 1))
		    (take (cadr lst) (- k 1)))
	    (ok? (cdr lst))
	    #f)))
  (define (shape-up lst)
    (append (map car lst) (cdr (car (reverse lst)))))
  (map shape-up (filter ok? (permutations lst))))