C.I.CLを眺める(8) HASHED-DELETE-DUPLICATES — #:g1

Posted 2011-02-16 09:23:00 GMT

今回は、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)

というところ

comments powered by Disqus