某所での問題の回答
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))