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 |

2011-02-16

C.I.CLを眺める(8) HASHED-DELETE-DUPLICATES

| 18:23 | C.I.CLを眺める(8) HASHED-DELETE-DUPLICATES - わだばLisperになる を含むブックマーク はてなブックマーク - C.I.CLを眺める(8) HASHED-DELETE-DUPLICATES - わだばLisperになる

今回は、C.I.CLのlist.lispから HASHED-DELETE-DUPLICATES です。

定義は、

(DEFUN HASHED-DELETE-DUPLICATES (SEQUENCE &KEY (TEST (FUNCTION EQL))
                                 TEST-NOT
                                 (START 0) (END (LENGTH SEQUENCE))
                                 (KEY (FUNCTION IDENTITY))
                                 (FROM-END NIL))
  (HASHED-REMOVE-DUPLICATES
   SEQUENCE :TEST TEST :TEST-NOT TEST-NOT :START START :END END
   :KEY KEY :FROM-END FROM-END))

ですが、一連のHASHED-*-DUPLICATESは、ハッシュに登録して重複を取り除くということから、原理的に元の配列を破壊することはない、ということなのか、REMOVEのバージョンをそのまま呼び出しています。

前回のものは、セットを作るものでリストとは違い順番等は無視できましたが、今回は、リストを対象にするもののようです。

動作はREMOVE系と同じなので書く意味もあまりないですが、

(import 'com.informatimago.common-lisp.list::hashed-delete-duplicates)
;=> T

(hashed-delete-duplicates "fooo")
;=> "fo"

(hashed-delete-duplicates #(f o o o o))
;=> #(F O)

(hashed-delete-duplicates '(f o o o o))
;=> (O F)

というところ