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 |
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-06-09
CLOSでL-99 (P25 ランダムに並び換え)
以前に作ったものを組み合わせて解答せよとのことなのですが、以前に作ったremove-atが予期せぬ動きをしていたため、はまってしまいました。
原因は、
(concatenate (class-of '(a)) () ())
のような処理の個所で、class-ofでは、consと判定されるのですが、結果は、()なので、クラスはCONSではなくなってしまうということでした。
LISTならば、CONS+NULLなので大丈夫ですがLISTとCONSの扱いの違いで割とはまることが多いです(;´Д`)
(rnd-permu '(a b c d e f)) ;==> (E A D F C B) (rnd-permu #(a b c d e f)) ;==> #(F E A C B D) (rnd-permu "abcdef") ;==> "fdbaec" (defgeneric RND-PERMU (sequence) (:documentation "P25 (*) Generate a random permutation of the elements of a list.")) (defmethod RND-PERMU ((sequence sequence)) (RND-SELECT sequence (length sequence))) ;; 修正版 (defmethod REMOVE-AT ((sequence sequence) (position integer)) (let ((class (if (listp sequence) 'list (class-of sequence)))) (values (concatenate class (subseq sequence 0 (1- position)) (subseq sequence position)) (elt sequence (1- position)))))
コメントを書く