某所での問題の回答

N=1のとき無限ループしないようにcuteを使うと良さげ。

(use util.list)

(define (overlaps xs n)
  (unfold (any-pred null? (compose null? cdr))
          (cut take* <> n)
          (cute drop* <> (max 1 (- n 1)))
          xs))

(overlaps '(0 1 2 3 4 5 6 7 8 9) 2) ; => ((0 1) (1 2) (2 3) (3 4) (4 5) (5 6) (6 7) (7 8) (8 9))
(overlaps '(0 1 2 3 4 5 6 7 8 9) 3) ; => ((0 1 2) (2 3 4) (4 5 6) (6 7 8) (8 9))
(overlaps '(0 1 2 3 4 5 6 7 8 9) 4) ; => ((0 1 2 3) (3 4 5 6) (6 7 8 9))
(overlaps '(0 1 2 3 4 5 6 7 8 9) 5) ; => ((0 1 2 3 4) (4 5 6 7 8) (8 9))
(overlaps '(0 1 2 3 4 5 6 7 8 9) 6) ; => ((0 1 2 3 4 5) (5 6 7 8 9))