1
0
Fork 0
cl-sites/HyperSpec-7-0/HyperSpec/Body/f_car_c.htm
2024-04-01 10:24:07 +02:00

229 lines
14 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: Accessor CAR, CDR, CAAR, CADR, CDAR...</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_rplaca.htm">
<LINK REL=UP HREF="c_conses.htm">
<LINK REL=NEXT HREF="f_cp_tre.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_rplaca.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Previous]" SRC="../Graphics/Prev.gif" ALIGN=Bottom></A><A REL=UP HREF="c_conses.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Up]" SRC="../Graphics/Up.gif" ALIGN=Bottom></A><A REL=NEXT HREF="f_cp_tre.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Next]" SRC="../Graphics/Next.gif" ALIGN=Bottom></A></H1>
<HR>
<A NAME="car"><A NAME="cdr"><A NAME="caar"><A NAME="cadr"><A NAME="cdar"><A NAME="cddr"><A NAME="caaar"><A NAME="caadr"><A NAME="cadar"><A NAME="caddr"><A NAME="cdaar"><A NAME="cdadr"><A NAME="cddar"><A NAME="cdddr"><A NAME="caaaar"><A NAME="caaadr"><A NAME="caadar"><A NAME="caaddr"><A NAME="cadaar"><A NAME="cadadr"><A NAME="caddar"><A NAME="cadddr"><A NAME="cdaaar"><A NAME="cdaadr"><A NAME="cdadar"><A NAME="cdaddr"><A NAME="cddaar"><A NAME="cddadr"><A NAME="cdddar"><A NAME="cddddr"><I>Accessor</I> <B>CAR, CDR, CAAR, CADR, CDAR, CDDR, CAAAR, CAADR, CADAR, CADDR, CDAAR, CDADR, CDDAR, CDDDR, CAAAAR, CAAADR, CAADAR, CAADDR, CADAAR, CADADR, CADDAR, CADDDR, CDAAAR, CDAADR, CDADAR, CDADDR, CDDAAR, CDDADR, CDDDAR, CDDDDR</B></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A></A> <P>
<P><B>Syntax:</B><P>
<P>
<B>car</B> <I>x</I> =&gt; <I>object</I><P>
<B>cdr</B> <I>x</I> =&gt; <I>object</I><P>
<B>caar</B> <I>x</I> =&gt; <I>object</I><P>
<B>cadr</B> <I>x</I> =&gt; <I>object</I><P>
<B>cdar</B> <I>x</I> =&gt; <I>object</I><P>
<B>cddr</B> <I>x</I> =&gt; <I>object</I><P>
<B>caaar</B> <I>x</I> =&gt; <I>object</I><P>
<B>caadr</B> <I>x</I> =&gt; <I>object</I><P>
<B>cadar</B> <I>x</I> =&gt; <I>object</I><P>
<B>caddr</B> <I>x</I> =&gt; <I>object</I><P>
<B>cdaar</B> <I>x</I> =&gt; <I>object</I><P>
<B>cdadr</B> <I>x</I> =&gt; <I>object</I><P>
<B>cddar</B> <I>x</I> =&gt; <I>object</I><P>
<B>cdddr</B> <I>x</I> =&gt; <I>object</I><P>
<B>caaaar</B> <I>x</I> =&gt; <I>object</I><P>
<B>caaadr</B> <I>x</I> =&gt; <I>object</I><P>
<B>caadar</B> <I>x</I> =&gt; <I>object</I><P>
<B>caaddr</B> <I>x</I> =&gt; <I>object</I><P>
<B>cadaar</B> <I>x</I> =&gt; <I>object</I><P>
<B>cadadr</B> <I>x</I> =&gt; <I>object</I><P>
<B>caddar</B> <I>x</I> =&gt; <I>object</I><P>
<B>cadddr</B> <I>x</I> =&gt; <I>object</I><P>
<B>cdaaar</B> <I>x</I> =&gt; <I>object</I><P>
<B>cdaadr</B> <I>x</I> =&gt; <I>object</I><P>
<B>cdadar</B> <I>x</I> =&gt; <I>object</I><P>
<B>cdaddr</B> <I>x</I> =&gt; <I>object</I><P>
<B>cddaar</B> <I>x</I> =&gt; <I>object</I><P>
<B>cddadr</B> <I>x</I> =&gt; <I>object</I><P>
<B>cdddar</B> <I>x</I> =&gt; <I>object</I><P>
<B>cddddr</B> <I>x</I> =&gt; <I>object</I><P>
<TT>(setf (</TT><B>car</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cdr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>caar</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cadr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cdar</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cddr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>caaar</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>caadr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cadar</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>caddr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cdaar</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cdadr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cddar</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cdddr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>caaaar</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>caaadr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>caadar</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>caaddr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cadaar</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cadadr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>caddar</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cadddr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cdaaar</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cdaadr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cdadar</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cdaddr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cddaar</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cddadr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cdddar</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<TT>(setf (</TT><B>cddddr</B> <I>x</I><TT>) </TT><I>new-object</I><TT>)</TT><P>
<P>
<P><B>Pronunciation:</B><P>
<P>
<A REL=DEFINITION HREF="#cadr"><B>cadr</B></A>: ['ka,duhr] <P>
<A REL=DEFINITION HREF="#caddr"><B>caddr</B></A>: ['kaduh,duhr] or ['ka,dduhr] <P>
<A REL=DEFINITION HREF="#cdr"><B>cdr</B></A>: ['k,duhr] <P>
<A REL=DEFINITION HREF="#cddr"><B>cddr</B></A>: ['kduh,duhr] or ['kuh,dduhr] <P>
<P><B>Arguments and Values:</B><P>
<P>
<I>x</I>---a <A REL=DEFINITION HREF="26_glo_l.htm#list"><I>list</I></A>. <P>
<I>object</I>---an <A REL=DEFINITION HREF="26_glo_o.htm#object"><I>object</I></A>. <P>
<I>new-object</I>---an <A REL=DEFINITION HREF="26_glo_o.htm#object"><I>object</I></A>. <P>
<P><B>Description:</B><P>
<P>
If <I>x</I> is a <A REL=DEFINITION HREF="26_glo_c.htm#cons"><I>cons</I></A>, <A REL=DEFINITION HREF="#car"><B>car</B></A> returns the <A REL=DEFINITION HREF="26_glo_c.htm#car"><I>car</I></A> of that <A REL=DEFINITION HREF="26_glo_c.htm#cons"><I>cons</I></A>. If <I>x</I> is <A REL=DEFINITION HREF="a_nil.htm#nil"><B>nil</B></A>, <A REL=DEFINITION HREF="#car"><B>car</B></A> returns <A REL=DEFINITION HREF="a_nil.htm#nil"><B>nil</B></A>. <P>
If <I>x</I> is a <A REL=DEFINITION HREF="26_glo_c.htm#cons"><I>cons</I></A>, <A REL=DEFINITION HREF="#cdr"><B>cdr</B></A> returns the <A REL=DEFINITION HREF="26_glo_c.htm#cdr"><I>cdr</I></A> of that <A REL=DEFINITION HREF="26_glo_c.htm#cons"><I>cons</I></A>. If <I>x</I> is <A REL=DEFINITION HREF="a_nil.htm#nil"><B>nil</B></A>, <A REL=DEFINITION HREF="#cdr"><B>cdr</B></A> returns <A REL=DEFINITION HREF="a_nil.htm#nil"><B>nil</B></A>. <P>
<A REL=DEFINITION HREF="26_glo_f.htm#function"><I>Functions</I></A> are provided which perform compositions of up to four <A REL=DEFINITION HREF="#car"><B>car</B></A> and <A REL=DEFINITION HREF="#cdr"><B>cdr</B></A> operations. Their <A REL=DEFINITION HREF="26_glo_n.htm#name"><I>names</I></A> consist of a <TT>C</TT>, followed by two, three, or four occurrences of <TT>A</TT> or <TT>D</TT>, and finally an <TT>R</TT>. The series of <TT>A</TT>'s and <TT>D</TT>'s in each <A REL=DEFINITION HREF="26_glo_f.htm#function"><I>function</I></A>'s <A REL=DEFINITION HREF="26_glo_n.htm#name"><I>name</I></A> is chosen to identify the series of <A REL=DEFINITION HREF="#car"><B>car</B></A> and <A REL=DEFINITION HREF="#cdr"><B>cdr</B></A> operations that is performed by the function. The order in which the <TT>A</TT>'s and <TT>D</TT>'s appear is the inverse of the order in which the corresponding operations are performed. The next figure defines the relationships precisely. <P>
<PRE>
This <A REL=DEFINITION HREF="26_glo_p.htm#place">place</A> ... Is equivalent to this <A REL=DEFINITION HREF="26_glo_p.htm#place">place</A> ...
(caar x) (car (car x))
(cadr x) (car (cdr x))
(cdar x) (cdr (car x))
(cddr x) (cdr (cdr x))
(caaar x) (car (car (car x)))
(caadr x) (car (car (cdr x)))
(cadar x) (car (cdr (car x)))
(caddr x) (car (cdr (cdr x)))
(cdaar x) (cdr (car (car x)))
(cdadr x) (cdr (car (cdr x)))
(cddar x) (cdr (cdr (car x)))
(cdddr x) (cdr (cdr (cdr x)))
(caaaar x) (car (car (car (car x))))
(caaadr x) (car (car (car (cdr x))))
(caadar x) (car (car (cdr (car x))))
(caaddr x) (car (car (cdr (cdr x))))
(cadaar x) (car (cdr (car (car x))))
(cadadr x) (car (cdr (car (cdr x))))
(caddar x) (car (cdr (cdr (car x))))
(cadddr x) (car (cdr (cdr (cdr x))))
(cdaaar x) (cdr (car (car (car x))))
(cdaadr x) (cdr (car (car (cdr x))))
(cdadar x) (cdr (car (cdr (car x))))
(cdaddr x) (cdr (car (cdr (cdr x))))
(cddaar x) (cdr (cdr (car (car x))))
(cddadr x) (cdr (cdr (car (cdr x))))
(cdddar x) (cdr (cdr (cdr (car x))))
(cddddr x) (cdr (cdr (cdr (cdr x))))
</PRE>
<P><B>Figure 14-6. CAR and CDR variants</B> <P>
<A REL=DEFINITION HREF="m_setf_.htm#setf"><B>setf</B></A> can also be used with any of these functions to change an existing component of <I>x</I>, but <A REL=DEFINITION HREF="m_setf_.htm#setf"><B>setf</B></A> will not make new components. So, for example, the <A REL=DEFINITION HREF="26_glo_c.htm#car"><I>car</I></A> of a <A REL=DEFINITION HREF="26_glo_c.htm#cons"><I>cons</I></A> can be assigned with <A REL=DEFINITION HREF="m_setf_.htm#setf"><B>setf</B></A> of <A REL=DEFINITION HREF="#car"><B>car</B></A>, but the <A REL=DEFINITION HREF="26_glo_c.htm#car"><I>car</I></A> of <A REL=DEFINITION HREF="a_nil.htm#nil"><B>nil</B></A> cannot be assigned with <A REL=DEFINITION HREF="m_setf_.htm#setf"><B>setf</B></A> of <A REL=DEFINITION HREF="#car"><B>car</B></A>. Similarly, the <A REL=DEFINITION HREF="26_glo_c.htm#car"><I>car</I></A> of the <A REL=DEFINITION HREF="26_glo_c.htm#car"><I>car</I></A> of a <A REL=DEFINITION HREF="26_glo_c.htm#cons"><I>cons</I></A> whose <A REL=DEFINITION HREF="26_glo_c.htm#car"><I>car</I></A> is a <A REL=DEFINITION HREF="26_glo_c.htm#cons"><I>cons</I></A> can be assigned with <A REL=DEFINITION HREF="m_setf_.htm#setf"><B>setf</B></A> of <A REL=DEFINITION HREF="#caar"><B>caar</B></A>, but neither <A REL=DEFINITION HREF="a_nil.htm#nil"><B>nil</B></A>nor a <A REL=DEFINITION HREF="26_glo_c.htm#cons"><I>cons</I></A> whose car is <A REL=DEFINITION HREF="a_nil.htm#nil"><B>nil</B></A> can be assigned with <A REL=DEFINITION HREF="m_setf_.htm#setf"><B>setf</B></A> of <A REL=DEFINITION HREF="#caar"><B>caar</B></A>. <P>
The argument <I>x</I> is permitted to be a <A REL=DEFINITION HREF="26_glo_d.htm#dotted_list"><I>dotted list</I></A> or a <A REL=DEFINITION HREF="26_glo_c.htm#circular_list"><I>circular list</I></A>. <P>
<P><B>Examples:</B><P>
<P>
<PRE>
(car nil) =&gt; NIL
(cdr '(1 . 2)) =&gt; 2
(cdr '(1 2)) =&gt; (2)
(cadr '(1 2)) =&gt; 2
(car '(a b c)) =&gt; A
(cdr '(a b c)) =&gt; (B C)
</PRE>
</TT> <P>
<P><B>Affected By:</B> None.
<P>
<P><B>Exceptional Situations:</B><P>
<P>
The functions <A REL=DEFINITION HREF="#car"><B>car</B></A> and <A REL=DEFINITION HREF="#cdr"><B>cdr</B></A> should signal <A REL=DEFINITION HREF="e_tp_err.htm#type-error"><B>type-error</B></A> if they receive an argument which is not a <A REL=DEFINITION HREF="26_glo_l.htm#list"><I>list</I></A>. The other functions (<A REL=DEFINITION HREF="#caar"><B>caar</B></A>, <A REL=DEFINITION HREF="#cadr"><B>cadr</B></A>, ... <A REL=DEFINITION HREF="#cddddr"><B>cddddr</B></A>) should behave for the purpose of error checking as if defined by appropriate calls to <A REL=DEFINITION HREF="#car"><B>car</B></A> and <A REL=DEFINITION HREF="#cdr"><B>cdr</B></A>. <P>
<P><B>See Also:</B><P>
<P>
<A REL=DEFINITION HREF="f_rplaca.htm#rplaca"><B>rplaca</B></A>, <A REL=DEFINITION HREF="f_firstc.htm#first"><B>first</B></A>, <A REL=DEFINITION HREF="f_rest.htm#rest"><B>rest</B></A> <P>
<P><B>Notes:</B><P>
<P>
The <A REL=DEFINITION HREF="26_glo_c.htm#car"><I>car</I></A> of a <A REL=DEFINITION HREF="26_glo_c.htm#cons"><I>cons</I></A> can also be altered by using <A REL=DEFINITION HREF="f_rplaca.htm#rplaca"><B>rplaca</B></A>, and the <A REL=DEFINITION HREF="26_glo_c.htm#cdr"><I>cdr</I></A> of a <A REL=DEFINITION HREF="26_glo_c.htm#cons"><I>cons</I></A> can be altered by using <A REL=DEFINITION HREF="f_rplaca.htm#rplacd"><B>rplacd</B></A>. <P>
<PRE>
(car x) == (first x)
(cadr x) == (second x) == (car (cdr x))
(caddr x) == (third x) == (car (cdr (cdr x)))
(cadddr x) == (fourth x) == (car (cdr (cdr (cdr x))))
</PRE>
</TT> <P>
<P><HR>The following <A REL=META HREF="../Front/X3J13Iss.htm">X3J13 cleanup issue</A>, <I>not part of the specification</I>, applies to this section:<P><UL><LI> <A REL=CHILD HREF="../Issues/iss138.htm">DOTTED-LIST-ARGUMENTS:CLARIFY</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>