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-03-25

CLOSでL-99 (P16 周期Nで要素を間引く)

| 19:39 | CLOSでL-99 (P16 周期Nで要素を間引く) - わだばLisperになる を含むブックマーク はてなブックマーク - CLOSでL-99 (P16 周期Nで要素を間引く) - わだばLisperになる

まったくもってCLOSの勉強にはなっていないのですが、ややこしい総称関数の引数の書法くらいは覚えられるかも知れない(笑)

(drop '(a b c d e f g h i k) 3)
;=> (A B D E G H K)

(defgeneric DROP (lst n)
  (:documentation 
   "P17 (*) Split a list into two parts; the length of the first part is given.")
  (:method (lst n) (drop1 lst n n)))

(defmethod DROP1 ((lst null) n cnt)
  () )

(defmethod DROP1 ((lst cons) n (cnt (eql 1)))
  (DROP1 (cdr lst) n n))

(defmethod DROP1 ((lst cons) n cnt)
  (destructuring-bind (head . tail) lst
    (cons head (DROP1 tail n (1- cnt)))))