strange-fold
sicpのaccumulate-nのところで出てきた。
((1 2 3) (4 5 6) (7 8 9) (10 11 12))
こんな感じの並びを簡単に作れたらいいなー
srfi-1の中にこんなのがあった
- drop
- take
これがあれば楽に作れるかもしれない
(use-srfi 1) (define (f lst n) (if (null? lst) '() (cons (take lst n) (f (drop lst n) n)))) (f (iota 10) 2) ;;10:user> => ((0 1) (2 3) (4 5) (6 7) (8 9))
もう少し一般化できそう
(define (strange-fold op init seq n) (if (null? seq) init (op (take seq n) (strange-fold op init (drop seq n) n)))) (strange-fold cons '() (iota 12 1) 3) ;;11:user> => ((1 2 3) (4 5 6) (7 8 9) (10 11 12))
いや、まぁこれでもできるんだけど…
(map (pa$ iota 3) (iota 4 1 3)) ;;13:user> => ((1 2 3) (4 5 6) (7 8 9) (10 11 12))