小学校の教科内容 | プリンタなおった > #permalink リストをn回コピー 手頃なお題だったのでまたネタにさせていただく。 (リストをn回コピーして増やす) -分室の分室 やりたいのは、こういうこと。↓ (0 1 2 3 4) → (0 1 2 3 4 0 1 2 3 4 0 1 2 3 4) ; 3回コピー(長さが3倍) 標準+srfi-1 ならこれが短い (define (dupn-1 lis k) (concatenate (make-list lis k))) kが非常に大きくて、中間リストを作るのが嫌なら、 ソースを循環リストにして必要な要素数だけtakeするという手もある。 (define (dupn-2 lis k) (take (apply circular-list lis) (* k (length lis)))) srfi-42が使えるならさらに短い (define (dupn-3 lis k) (append-ec (: _ k) lis)) ちなみにCommon Lispだと上記 dupn-1 と dupn-3 はそれぞれこんな感じ。 (defun dupn-cl1 (lis k) (apply #'concatenate 'list (make-list k :initial-element lis))) (defun dupn-cl3 (lis k) (loop for n below k append lis)) Tags: Scheme, Gauche