83 lines
9.6 KiB
HTML
83 lines
9.6 KiB
HTML
<!-- Common Lisp HyperSpec (TM), version 7.0 generated by Kent M. Pitman on Mon, 11-Apr-2005 2:31am EDT -->
|
|
<HTML>
|
|
<HEAD>
|
|
<TITLE>CLHS: Function REMOVE-DUPLICATES, DELETE-DUPLICATES</TITLE>
|
|
<LINK HREF="../Data/clhs.css" REL="stylesheet" TYPE="text/css" />
|
|
<META HTTP-EQUIV="Author" CONTENT="Kent M. Pitman">
|
|
<META HTTP-EQUIV="Organization" CONTENT="LispWorks Ltd.">
|
|
<LINK REL=TOP HREF="../Front/index.htm">
|
|
<LINK REL=COPYRIGHT HREF="../Front/Help.htm#Legal">
|
|
<LINK REL=DISCLAIMER HREF="../Front/Help.htm#Disclaimer">
|
|
<LINK REL=PREV HREF="f_rm_rm.htm">
|
|
<LINK REL=UP HREF="c_sequen.htm">
|
|
<LINK REL=NEXT HREF="18_.htm">
|
|
</HEAD>
|
|
<BODY>
|
|
<H1><A REV=MADE HREF="http://www.lispworks.com/"><IMG WIDTH=80 HEIGHT=65 ALT="[LISPWORKS]" SRC="../Graphics/LWSmall.gif" ALIGN=Bottom></A><A REL=TOP HREF="../Front/index.htm"><IMG WIDTH=237 HEIGHT=65 ALT="[Common Lisp HyperSpec (TM)]" SRC="../Graphics/CLHS_Sm.gif" ALIGN=Bottom></A> <A REL=PREV HREF="f_rm_rm.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Previous]" SRC="../Graphics/Prev.gif" ALIGN=Bottom></A><A REL=UP HREF="c_sequen.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Up]" SRC="../Graphics/Up.gif" ALIGN=Bottom></A><A REL=NEXT HREF="18_.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Next]" SRC="../Graphics/Next.gif" ALIGN=Bottom></A></H1>
|
|
|
|
<HR>
|
|
|
|
<A NAME="remove-duplicates"><A NAME="delete-duplicates"><I>Function</I> <B>REMOVE-DUPLICATES, DELETE-DUPLICATES</B></A></A> <P>
|
|
<P><B>Syntax:</B><P>
|
|
<P>
|
|
|
|
<B>remove-duplicates</B> <I>sequence <TT>&key</TT> from-end test test-not start end key</I><P> => <I>result-sequence</I><P>
|
|
<P>
|
|
|
|
<B>delete-duplicates</B> <I>sequence <TT>&key</TT> from-end test test-not start end key</I><P> => <I>result-sequence</I><P>
|
|
<P>
|
|
<P><B>Arguments and Values:</B><P>
|
|
<P>
|
|
<I>sequence</I>---a <A REL=DEFINITION HREF="26_glo_p.htm#proper_sequence"><I>proper sequence</I></A>. <P>
|
|
<I>from-end</I>---a <A REL=DEFINITION HREF="26_glo_g.htm#generalized_boolean"><I>generalized boolean</I></A>. The default is <A REL=DEFINITION HREF="26_glo_f.htm#false"><I>false</I></A>. <P>
|
|
<I>test</I>---a <A REL=DEFINITION HREF="26_glo_d.htm#designator"><I>designator</I></A> for a <A REL=DEFINITION HREF="26_glo_f.htm#function"><I>function</I></A> of two <A REL=DEFINITION HREF="26_glo_a.htm#argument"><I>arguments</I></A> that returns a <A REL=DEFINITION HREF="26_glo_g.htm#generalized_boolean"><I>generalized boolean</I></A>. <P>
|
|
<I>test-not</I>---a <A REL=DEFINITION HREF="26_glo_d.htm#designator"><I>designator</I></A> for a <A REL=DEFINITION HREF="26_glo_f.htm#function"><I>function</I></A> of two <A REL=DEFINITION HREF="26_glo_a.htm#argument"><I>arguments</I></A> that returns a <A REL=DEFINITION HREF="26_glo_g.htm#generalized_boolean"><I>generalized boolean</I></A>. <P>
|
|
<I>start</I>, <I>end</I>---<A REL=DEFINITION HREF="26_glo_b.htm#bounding_index_designator"><I>bounding index designators</I></A> of <I>sequence</I>. The defaults for <I>start</I> and <I>end</I> are <TT>0</TT> and <A REL=DEFINITION HREF="a_nil.htm#nil"><B>nil</B></A>, respectively. <P>
|
|
<I>key</I>---a <A REL=DEFINITION HREF="26_glo_d.htm#designator"><I>designator</I></A> for a <A REL=DEFINITION HREF="26_glo_f.htm#function"><I>function</I></A> of one argument, or <A REL=DEFINITION HREF="a_nil.htm#nil"><B>nil</B></A>. <P>
|
|
<I>result-sequence</I>---a <A REL=DEFINITION HREF="26_glo_s.htm#sequence"><I>sequence</I></A>. <P>
|
|
<P><B>Description:</B><P>
|
|
<P>
|
|
<A REL=DEFINITION HREF="#remove-duplicates"><B>remove-duplicates</B></A> returns a modified copy of <I>sequence</I> from which any element that matches another element occurring in <I>sequence</I> has been removed. <P>
|
|
If <I>sequence</I> is a <A REL=DEFINITION HREF="26_glo_v.htm#vector"><I>vector</I></A>, the result is a <A REL=DEFINITION HREF="26_glo_v.htm#vector"><I>vector</I></A> that has the same <A REL=DEFINITION HREF="26_glo_a.htm#actual_array_element_type"><I>actual array element type</I></A> as <I>sequence</I>. If <I>sequence</I> is a <A REL=DEFINITION HREF="26_glo_l.htm#list"><I>list</I></A>, the result is a <A REL=DEFINITION HREF="26_glo_l.htm#list"><I>list</I></A>. <P>
|
|
<A REL=DEFINITION HREF="#delete-duplicates"><B>delete-duplicates</B></A> is like <A REL=DEFINITION HREF="#remove-duplicates"><B>remove-duplicates</B></A>, but <A REL=DEFINITION HREF="#delete-duplicates"><B>delete-duplicates</B></A> may modify <I>sequence</I>. <P>
|
|
The elements of <I>sequence</I> are compared <A REL=DEFINITION HREF="26_glo_p.htm#pairwise"><I>pairwise</I></A>, and if any two match, then the one occurring earlier in <I>sequence</I> is discarded, unless <I>from-end</I> is <A REL=DEFINITION HREF="26_glo_t.htm#true"><I>true</I></A>, in which case the one later in <I>sequence</I> is discarded. <P>
|
|
<A REL=DEFINITION HREF="#remove-duplicates"><B>remove-duplicates</B></A> and <A REL=DEFINITION HREF="#delete-duplicates"><B>delete-duplicates</B></A> return a <A REL=DEFINITION HREF="26_glo_s.htm#sequence"><I>sequence</I></A> of the same <A REL=DEFINITION HREF="26_glo_t.htm#type"><I>type</I></A> as <I>sequence</I> with enough elements removed so that no two of the remaining elements match. The order of the elements remaining in the result is the same as the order in which they appear in <I>sequence</I>. <P>
|
|
<A REL=DEFINITION HREF="#remove-duplicates"><B>remove-duplicates</B></A> returns a <A REL=DEFINITION HREF="26_glo_s.htm#sequence"><I>sequence</I></A> that may share with <I>sequence</I> or may be <A REL=DEFINITION HREF="26_glo_i.htm#identical"><I>identical</I></A> to <I>sequence</I> if no elements need to be removed. <P>
|
|
<A REL=DEFINITION HREF="#delete-duplicates"><B>delete-duplicates</B></A>, when <I>sequence</I> is a <A REL=DEFINITION HREF="26_glo_l.htm#list"><I>list</I></A>, is permitted to <A REL=DEFINITION HREF="m_setf_.htm#setf"><B>setf</B></A> any part, <A REL=DEFINITION HREF="f_car_c.htm#car"><B>car</B></A> or <A REL=DEFINITION HREF="f_car_c.htm#cdr"><B>cdr</B></A>, of the top-level list structure in that <I>sequence</I>. When <I>sequence</I> is a <A REL=DEFINITION HREF="26_glo_v.htm#vector"><I>vector</I></A>, <A REL=DEFINITION HREF="#delete-duplicates"><B>delete-duplicates</B></A> is permitted to change the dimensions of the <A REL=DEFINITION HREF="26_glo_v.htm#vector"><I>vector</I></A> and to slide its elements into new positions without permuting them to produce the resulting <A REL=DEFINITION HREF="26_glo_v.htm#vector"><I>vector</I></A>. <P>
|
|
<P><B>Examples:</B><P>
|
|
<P>
|
|
<PRE>
|
|
(remove-duplicates "aBcDAbCd" :test #'char-equal :from-end t) => "aBcD"
|
|
(remove-duplicates '(a b c b d d e)) => (A C B D E)
|
|
(remove-duplicates '(a b c b d d e) :from-end t) => (A B C D E)
|
|
(remove-duplicates '((foo #\a) (bar #\%) (baz #\A))
|
|
:test #'char-equal :key #'cadr) => ((BAR #\%) (BAZ #\A))
|
|
(remove-duplicates '((foo #\a) (bar #\%) (baz #\A))
|
|
:test #'char-equal :key #'cadr :from-end t) => ((FOO #\a) (BAR #\%))
|
|
(setq tester (list 0 1 2 3 4 5 6))
|
|
(delete-duplicates tester :key #'oddp :start 1 :end 6) => (0 4 5 6)
|
|
</PRE>
|
|
</TT> <P>
|
|
<P><B>Side Effects:</B><P>
|
|
<P>
|
|
<A REL=DEFINITION HREF="#delete-duplicates"><B>delete-duplicates</B></A> might destructively modify <I>sequence</I>. <P>
|
|
<P><B>Affected By:</B> None.
|
|
<P>
|
|
<P><B>Exceptional Situations:</B><P>
|
|
<P>
|
|
Should signal an error of <A REL=DEFINITION HREF="26_glo_t.htm#type"><I>type</I></A> <A REL=DEFINITION HREF="e_tp_err.htm#type-error"><B>type-error</B></A> if <I>sequence</I> is not a <A REL=DEFINITION HREF="26_glo_p.htm#proper_sequence"><I>proper sequence</I></A>. <P>
|
|
<P><B>See Also:</B><P>
|
|
<P>
|
|
<A REL=CHILD HREF="03_ba.htm">Section 3.2.1 (Compiler Terminology)</A>, <A REL=CHILD HREF="03_f.htm">Section 3.6 (Traversal Rules and Side Effects)</A> <P>
|
|
<P><B>Notes:</B><P>
|
|
<P>
|
|
If <I>sequence</I> is a <A REL=DEFINITION HREF="26_glo_v.htm#vector"><I>vector</I></A>, the result might or might not be simple, and might or might not be <A REL=DEFINITION HREF="26_glo_i.htm#identical"><I>identical</I></A> to <I>sequence</I>. <P>
|
|
The <TT>:test-not</TT> <A REL=DEFINITION HREF="26_glo_a.htm#argument"><I>argument</I></A> is deprecated. <P>
|
|
These functions are useful for converting <I>sequence</I> into a canonical form suitable for representing a set. <P>
|
|
<P><HR>The following <A REL=META HREF="../Front/X3J13Iss.htm">X3J13 cleanup issues</A>, <I>not part of the specification</I>, apply to this section:<P><UL><LI> <A REL=CHILD HREF="../Issues/iss345.htm">TEST-NOT-IF-NOT:FLUSH-ALL</A><LI> <A REL=CHILD HREF="../Issues/iss240.htm">MAPPING-DESTRUCTIVE-INTERACTION:EXPLICITLY-VAGUE</A><LI> <A REL=CHILD HREF="../Issues/iss083.htm">CONSTANT-MODIFICATION:DISALLOW</A><LI> <A REL=CHILD HREF="../Issues/iss293.htm">REMF-DESTRUCTION-UNSPECIFIED:X3J13-MAR-89</A><LI> <A REL=CHILD HREF="../Issues/iss284.htm">RANGE-OF-START-AND-END-PARAMETERS:INTEGER-AND-INTEGER-NIL</A><LI> <A REL=CHILD HREF="../Issues/iss332.htm">SUBSEQ-OUT-OF-BOUNDS</A><P></UL><HR>
|
|
|
|
<A REL=NAVIGATOR HREF="../Front/StartPts.htm"><IMG WIDTH=80 HEIGHT=40 ALT="[Starting Points]" SRC="../Graphics/StartPts.gif" ALIGN=Bottom></A><A REL=TOC HREF="../Front/Contents.htm"><IMG WIDTH=80 HEIGHT=40 ALT="[Contents]" SRC="../Graphics/Contents.gif" ALIGN=Bottom></A><A REL=INDEX HREF="../Front/X_Master.htm"><IMG WIDTH=80 HEIGHT=40 ALT="[Index]" SRC="../Graphics/Index.gif" ALIGN=Bottom></A><A REL=INDEX HREF="../Front/X_Symbol.htm"><IMG WIDTH=80 HEIGHT=40 ALT="[Symbols]" SRC="../Graphics/Symbols.gif" ALIGN=Bottom></A><A REL=GLOSSARY HREF="../Body/26_a.htm"><IMG WIDTH=80 HEIGHT=40 ALT="[Glossary]" SRC="../Graphics/Glossary.gif" ALIGN=Bottom></A><A HREF="../Front/X3J13Iss.htm"><IMG WIDTH=80 HEIGHT=40 ALT="[Issues]" SRC="../Graphics/Issues.gif" ALIGN=Bottom></A><BR>
|
|
|
|
<A REL=COPYRIGHT HREF="../Front/Help.htm#Legal"><I>Copyright 1996-2005, LispWorks Ltd. All rights reserved.</I></A><P>
|
|
</BODY>
|
|
</HTML>
|