要素をn回繰り替えしてリストを作る関数。
30分プログラム、その519。要素をn回繰り替えしてリストを作る関数。
同じ文字列のn回繰り返しを作る最速の方法を探求してみた - muddy brown thangに影響を受けて書き始めたら、全然違うところに行ってしまった。元ネタは"Javascriptで文字列の結合はどうするのが速い?"だったのに、Schemeで書いてるし、そもそも文字列の結合をしてない。まあ、これはこれで。
使い方
$ (repeat-1 3 "hoge") ("hoge" "hoge" "hoge")
ソースコード
#! /opt/local/bin/gosh ;; -*- mode:scheme; coding:utf-8 -*- ;; ;; hoge_x_n.scm - ;; ;; Copyright(C) 2009 by mzp ;; Author: MIZUNO Hiroki / mzpppp at gmail dot com ;; http://howdyworld.org ;; ;; Timestamp: 2009/01/31 20:03:42 ;; ;; This program is free software; you can redistribute it and/or ;; modify it under MIT Lincence. ;; (use srfi-1) (use srfi-13) (use gauche.time) ;; 普通に再帰で実装する (define (repeat-1 n str) (if (= n 0) '() (cons str (repeat-1 (- n 1) str)))) ;; 循環リストを使ってみる (define (repeat-2 n str) (take (circular-list str) n)) ;; 累乗計算のアルゴリズムを流用する (define (repeat-3 n str) (cond ([= n 0] '()) ([even? n] (let1 xs (repeat-3 (/ n 2) str) (append xs xs))) (else (cons str (repeat-3 (- n 1) str))))) (define (bench f) (time (dotimes (i 100) (f 100000 "hoge"))))