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-28

ArcでL-99 (P23 ランダムに指定した個数の要素を選択)

| 12:10 | ArcでL-99 (P23 ランダムに指定した個数の要素を選択) - わだばLisperになる を含むブックマーク はてなブックマーク - ArcでL-99 (P23 ランダムに指定した個数の要素を選択) - わだばLisperになる

今回は、ランダムに指定した個数の要素を選択するというお題です。

ヒントとして以前に作成したremove-atとシステムに用意された乱数生成関数を利用して良いとのこと。

Arcには、乱数生成用のrand、引数の中からランダムに一つ返すrand-choice、シーケンスからランダムに一つ返す、random-elt等、妙に充実しています。

(rnd-select '(a b c d e f g h) 3)
;=> (a c d)

(def rnd-select (lst num)
  (and (< 0 num)
       ((afn (lst cnt)
	  (if (or no.lst (is len.lst num))
	      lst
	      (self (remove-at lst (+ 1 (rand len.lst)))
		    (+ 1 cnt))))
	lst num)))