2013/07/06

「リストをn個ずつのサブリストに分割 (Python)」をGaucheで

Gaucheにはそのものズバリなslicesという手続きがある。

(slices '(a b c d e f g) 3)
  ⇒ ((a b c) (d e f) (g))
(slices '(a b c d e f g) 3 #t 'z)
  ⇒ ((a b c) (d e f) (g z z))

で、それは置いといて、Pythonのzip(*[iter(s)]*n)ってのは、n個のiteraterを作ってzipしてるってことだと思う(python知らね)。

Gaucheだとgeneratorを使って実現できるんじゃないかな。Gaucheにもzip手続きはあるけど、gzipはない。gzipなしで書くとこんな感じのことかな。

(use gauche.generator)
(generator->list (apply gmap list (make-list 3 (giota 15))))
;; => ((0 1 2) (3 4 5) (6 7 8) (9 10 11) (12 13 14))

gzipを定義するとしたらこんなんでいいのかな。

(use gauche.generator)

(define (gzip . list-of-list)
  (apply gmap list list-of-list))

(generator->list (apply gzip (make-list 3 (giota 15))))
;; => ((0 1 2) (3 4 5) (6 7 8) (9 10 11) (12 13 14))

0 件のコメント:

コメントを投稿