Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-02-19

ArcでL-99 (P15 各要素を任意の回数複製)

| 15:02 | ArcでL-99 (P15 各要素を任意の回数複製) - わだばLisperになる を含むブックマーク はてなブックマーク - ArcでL-99 (P15 各要素を任意の回数複製) - わだばLisperになる

前回は2つずつにするというお題でしたが、今回は、ちょっと発展して任意の回数繰り返したリストを返せというお題です。

(repli '(a b c) 6)
;=> (a a a a a a a b b b b b b b c c c c c c c)

(def repli (lst times)
  ((afn (lst acc cnt)
     (if no.lst
	 rev.acc
	 (if (is 0 cnt)
	     (self cdr.lst (cons car.lst acc) times)
	     (self lst (cons car.lst acc) (- cnt 1)))))
   lst () times))

;; 繰り返しで
(def repli (lst times)
  (mappend [newlist times _] lst))

(def newlist (n (o elt nil))
  (let acc ()
    (repeat n (push elt acc))
    acc))