<HTML> <HEAD> <!-- Created by texi2html 1.56k + clip patches and <A href="http://www.clip.dia.fi.upm.es/Software">lpdoc</A> from ciao.texi on 28 January 2007 --> <LINK rel="stylesheet" href="ciao.css" type="text/css"> <TITLE>The Ciao Prolog System - List processing</TITLE> </HEAD> <BODY> Go to the <A HREF="ciao_1.html">first</A>, <A HREF="ciao_47.html">previous</A>, <A HREF="ciao_49.html">next</A>, <A HREF="ciao_241.html">last</A> section, <A HREF="ciao_toc.html">table of contents</A>. <P><HR><P> <H1><A NAME="SEC231" HREF="ciao_toc.html#TOC231">List processing</A></H1> <P> <A NAME="IDX3085"></A> <P> <STRONG>Author(s):</STRONG> The CLIP Group. <P> <STRONG>Version:</STRONG> 1.10#7 (2006/4/26, 19:22:13 CEST) <P> <STRONG>Version of last change:</STRONG> 1.9#318 (2004/2/26, 15:46:54 CET) <P> This module provides a set of predicates for list processing. <UL> <LI><A HREF="ciao_48.html#SEC232">Usage and interface (lists)</A> <LI><A HREF="ciao_48.html#SEC233">Documentation on exports (lists)</A> </UL> <H2><A NAME="SEC232" HREF="ciao_toc.html#TOC232">Usage and interface (<CODE>lists</CODE>)</A></H2> <div class="cartouche"> <UL> <LI><STRONG>Library usage:</STRONG> <CODE>:- use_module(library(lists)).</CODE> <LI><STRONG>Exports:</STRONG> <UL> <LI><EM>Predicates:</EM> <A NAME="IDX3086"></A> <CODE>nonsingle/1</CODE>, <A NAME="IDX3087"></A> <CODE>append/3</CODE>, <A NAME="IDX3088"></A> <CODE>reverse/2</CODE>, <A NAME="IDX3089"></A> <CODE>reverse/3</CODE>, <A NAME="IDX3090"></A> <CODE>delete/3</CODE>, <A NAME="IDX3091"></A> <CODE>delete_non_ground/3</CODE>, <A NAME="IDX3092"></A> <CODE>select/3</CODE>, <A NAME="IDX3093"></A> <CODE>length/2</CODE>, <A NAME="IDX3094"></A> <CODE>nth/3</CODE>, <A NAME="IDX3095"></A> <CODE>add_after/4</CODE>, <A NAME="IDX3096"></A> <CODE>add_before/4</CODE>, <A NAME="IDX3097"></A> <CODE>dlist/3</CODE>, <A NAME="IDX3098"></A> <CODE>list_concat/2</CODE>, <A NAME="IDX3099"></A> <CODE>list_insert/2</CODE>, <A NAME="IDX3100"></A> <CODE>insert_last/3</CODE>, <A NAME="IDX3101"></A> <CODE>contains_ro/2</CODE>, <A NAME="IDX3102"></A> <CODE>contains1/2</CODE>, <A NAME="IDX3103"></A> <CODE>nocontainsx/2</CODE>, <A NAME="IDX3104"></A> <CODE>last/2</CODE>, <A NAME="IDX3105"></A> <CODE>list_lookup/3</CODE>, <A NAME="IDX3106"></A> <CODE>list_lookup/4</CODE>, <A NAME="IDX3107"></A> <CODE>intset_insert/3</CODE>, <A NAME="IDX3108"></A> <CODE>intset_delete/3</CODE>, <A NAME="IDX3109"></A> <CODE>intset_in/2</CODE>, <A NAME="IDX3110"></A> <CODE>intset_sequence/3</CODE>, <A NAME="IDX3111"></A> <CODE>intersection/3</CODE>, <A NAME="IDX3112"></A> <CODE>union/3</CODE>, <A NAME="IDX3113"></A> <CODE>difference/3</CODE>, <A NAME="IDX3114"></A> <CODE>equal_lists/2</CODE>, <A NAME="IDX3115"></A> <CODE>list_to_list_of_lists/2</CODE>, <A NAME="IDX3116"></A> <CODE>powerset/2</CODE>, <A NAME="IDX3117"></A> <CODE>cross_product/2</CODE>. <LI><EM>Properties:</EM> <A NAME="IDX3118"></A> <CODE>list1/2</CODE>, <A NAME="IDX3119"></A> <CODE>sublist/2</CODE>, <A NAME="IDX3120"></A> <CODE>subordlist/2</CODE>. </UL> </UL> </div class="cartouche"> <H2><A NAME="SEC233" HREF="ciao_toc.html#TOC233">Documentation on exports (<CODE>lists</CODE>)</A></H2> <P> <A NAME="IDX3121"></A> <A NAME="IDX3122"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>nonsingle/1:</B> <DD><A NAME="IDX3123"></A> <P> <STRONG>Usage:</STRONG> <CODE>nonsingle(X)</CODE> <UL> <LI><EM>Description:</EM> <CODE>X</CODE> is not a singleton. </UL> </DL> <P> <A NAME="IDX3124"></A> <A NAME="IDX3125"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>append/3:</B> <DD><A NAME="IDX3126"></A> <P> <STRONG>Usage:</STRONG> <CODE>append(Xs, Ys, Zs)</CODE> <UL> <LI><EM>Description:</EM> <CODE>Zs</CODE> is <CODE>Ys</CODE> appended to <CODE>Xs</CODE>. </UL> </DL> <P> <A NAME="IDX3127"></A> <A NAME="IDX3128"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>reverse/2:</B> <DD><A NAME="IDX3129"></A> <P> <STRONG>Usage:</STRONG> <CODE>reverse(Xs, Ys)</CODE> <UL> <LI><EM>Description:</EM> Reverses the order of elements in <CODE>Xs</CODE>. <LI><EM>The following properties should hold at call time:</EM> <CODE>Xs</CODE> is a list. (<CODE>basic_props:list/1</CODE>) <CODE>Ys</CODE> is any term. (<CODE>basic_props:term/1</CODE>) <LI><EM>The following properties should hold upon exit:</EM> <CODE>Xs</CODE> is a list. (<CODE>basic_props:list/1</CODE>) <CODE>Ys</CODE> is a list. (<CODE>basic_props:list/1</CODE>) </UL> </DL> <P> <A NAME="IDX3130"></A> <A NAME="IDX3131"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>reverse/3:</B> <DD><A NAME="IDX3132"></A> <P> <STRONG>Usage:</STRONG> <CODE>reverse(A, B, C)</CODE> <UL> <LI><EM>Description:</EM> Reverse the order of elements in <CODE>A</CODE>, and append it with <CODE>B</CODE>. </UL> </DL> <P> <A NAME="IDX3133"></A> <A NAME="IDX3134"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>delete/3:</B> <DD><A NAME="IDX3135"></A> <P> <STRONG>Usage:</STRONG> <CODE>delete(L1, E, L2)</CODE> <UL> <LI><EM>Description:</EM> <CODE>L2</CODE> is <CODE>L1</CODE> without the ocurrences of <CODE>E</CODE>. </UL> </DL> <P> <A NAME="IDX3136"></A> <A NAME="IDX3137"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>delete_non_ground/3:</B> <DD><A NAME="IDX3138"></A> <P> <STRONG>Usage:</STRONG> <CODE>delete_non_ground(L1, E, L2)</CODE> <UL> <LI><EM>Description:</EM> <CODE>L2</CODE> is <CODE>L1</CODE> without the ocurrences of <CODE>E</CODE>. <CODE>E</CODE> can be a nonground term so that all the elements in <CODE>L1</CODE> it unifies with will be deleted </UL> </DL> <P> <A NAME="IDX3139"></A> <A NAME="IDX3140"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>select/3:</B> <DD><A NAME="IDX3141"></A> <P> <STRONG>Usage:</STRONG> <CODE>select(X, Xs, Ys)</CODE> <UL> <LI><EM>Description:</EM> <CODE>Xs</CODE> and <CODE>Ys</CODE> have the same elements except for one occurrence of <CODE>X</CODE>. </UL> </DL> <P> <A NAME="IDX3142"></A> <A NAME="IDX3143"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>length/2:</B> <DD><A NAME="IDX3144"></A> <P> <STRONG>General properties:</STRONG> <CODE>length(A, B)</CODE> <UL> <LI><EM>The following properties hold globally:</EM> This predicate is understood natively by CiaoPP. (<CODE>basic_props:native/1</CODE>) </UL> <P> <STRONG>Usage 1:</STRONG> <CODE>length(L, N)</CODE> <UL> <LI><EM>Description:</EM> Computes the length of <CODE>L</CODE>. <LI><EM>The following properties should hold at call time:</EM> <CODE>L</CODE> is a list. (<CODE>basic_props:list/1</CODE>) <CODE>N</CODE> is a free variable. (<CODE>term_typing:var/1</CODE>) <LI><EM>The following properties hold upon exit:</EM> <CODE>L</CODE> is a list. (<CODE>basic_props:list/1</CODE>) <CODE>N</CODE> is an integer. (<CODE>basic_props:int/1</CODE>) </UL> <P> <STRONG>Usage 2:</STRONG> <CODE>length(L, N)</CODE> <UL> <LI><EM>Description:</EM> Outputs <CODE>L</CODE> of length <CODE>N</CODE>. <LI><EM>The following properties should hold at call time:</EM> <CODE>L</CODE> is a free variable. (<CODE>term_typing:var/1</CODE>) <CODE>N</CODE> is an integer. (<CODE>basic_props:int/1</CODE>) <LI><EM>The following properties hold upon exit:</EM> <CODE>L</CODE> is a list. (<CODE>basic_props:list/1</CODE>) <CODE>N</CODE> is an integer. (<CODE>basic_props:int/1</CODE>) </UL> <P> <STRONG>Usage 3:</STRONG> <CODE>length(L, N)</CODE> <UL> <LI><EM>Description:</EM> Checks that <CODE>L</CODE> is of length <CODE>N</CODE>. <LI><EM>The following properties should hold at call time:</EM> <CODE>L</CODE> is a list. (<CODE>basic_props:list/1</CODE>) <CODE>N</CODE> is an integer. (<CODE>basic_props:int/1</CODE>) <LI><EM>The following properties hold upon exit:</EM> <CODE>L</CODE> is a list. (<CODE>basic_props:list/1</CODE>) <CODE>N</CODE> is an integer. (<CODE>basic_props:int/1</CODE>) </UL> </DL> <P> <A NAME="IDX3145"></A> <A NAME="IDX3146"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>nth/3:</B> <DD><A NAME="IDX3147"></A> <P> <CODE>nth(N, List, Elem)</CODE> <P> <CODE>N</CODE> is the position in <CODE>List</CODE> of <CODE>Elem</CODE>. <CODE>N</CODE> counts from one. <P> <STRONG>Usage 1:</STRONG> <CODE>nth(+int, ?list, ?term)</CODE> <UL> <LI><EM>Description:</EM> Unifies <CODE>Elem</CODE> and the <CODE>N</CODE>th element of <CODE>List</CODE>. </UL> <P> <STRONG>Usage 2:</STRONG> <CODE>nth(-int, ?list, ?term)</CODE> <UL> <LI><EM>Description:</EM> Finds the positions where <CODE>Elem</CODE> is in <CODE>List</CODE>. Positions are found in ascending order. </UL> </DL> <P> <A NAME="IDX3148"></A> <A NAME="IDX3149"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>add_after/4:</B> <DD><A NAME="IDX3150"></A> <P> <STRONG>Usage:</STRONG> <CODE>add_after(+L0, +E0, +E, -L)</CODE> <UL> <LI><EM>Description:</EM> Adds element <CODE>E</CODE> after element <CODE>E0</CODE> (or at end) to list <CODE>L0</CODE> returning in <CODE>L</CODE> the new list (uses term comparison). </UL> </DL> <P> <A NAME="IDX3151"></A> <A NAME="IDX3152"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>add_before/4:</B> <DD><A NAME="IDX3153"></A> <P> <STRONG>Usage:</STRONG> <CODE>add_before(+L0, +E0, +E, -L)</CODE> <UL> <LI><EM>Description:</EM> Adds element E before element E0 (or at start) to list L0 returning in L the new list (uses term comparison). </UL> </DL> <P> <A NAME="IDX3154"></A> <A NAME="IDX3155"></A> <DL> <DT><span class="define">PROPERTY:</span> <B>list1/2:</B> <DD><A NAME="IDX3156"></A> <P> <EM>Meta-predicate</EM> with arguments: <CODE>list1(?,pred(1))</CODE>. <P> <STRONG>Usage:</STRONG> <CODE>list1(X, Y)</CODE> <UL> <LI><EM>Description:</EM> <CODE>X</CODE> is a list of <CODE>Y</CODE>s of at least one element. </UL> </DL> <P> <A NAME="IDX3157"></A> <A NAME="IDX3158"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>dlist/3:</B> <DD><A NAME="IDX3159"></A> <P> <STRONG>Usage:</STRONG> <CODE>dlist(List, DList, Tail)</CODE> <UL> <LI><EM>Description:</EM> <CODE>List</CODE> is the result of removing <CODE>Tail</CODE> from the end of <CODE>DList</CODE> (makes a difference list from a list). </UL> </DL> <P> <A NAME="IDX3160"></A> <A NAME="IDX3161"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>list_concat/2:</B> <DD><A NAME="IDX3162"></A> <P> <STRONG>Usage:</STRONG> <CODE>list_concat(LL, L)</CODE> <UL> <LI><EM>Description:</EM> <CODE>L</CODE> is the concatenation of all the lists in <CODE>LL</CODE>. <LI><EM>Call and exit should be <EM>compatible</EM> with:</EM> <CODE>LL</CODE> is a list of <CODE>list</CODE>s. (<CODE>basic_props:list/2</CODE>) <CODE>L</CODE> is a list. (<CODE>basic_props:list/1</CODE>) </UL> </DL> <P> <A NAME="IDX3163"></A> <A NAME="IDX3164"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>list_insert/2:</B> <DD><A NAME="IDX3165"></A> <P> <STRONG>Usage:</STRONG> <CODE>list_insert(-List, +Term)</CODE> <UL> <LI><EM>Description:</EM> Adds <CODE>Term</CODE> to the end of <CODE>List</CODE> if there is no element in <CODE>List</CODE> identical to <CODE>Term</CODE>. </UL> </DL> <P> <A NAME="IDX3166"></A> <A NAME="IDX3167"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>insert_last/3:</B> <DD><A NAME="IDX3168"></A> <P> <STRONG>Usage:</STRONG> <CODE>insert_last(+L0, +E, -L)</CODE> <UL> <LI><EM>Description:</EM> Adds element <CODE>E</CODE> at end of list <CODE>L0</CODE> returning <CODE>L</CODE>. </UL> </DL> <P> <A NAME="IDX3169"></A> <A NAME="IDX3170"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>contains_ro/2:</B> <DD><A NAME="IDX3171"></A> <P> <STRONG>Usage:</STRONG> <UL> <LI><EM>Description:</EM> Impure membership (does not instantiate a variable in its first argument. </UL> </DL> <P> <A NAME="IDX3172"></A> <A NAME="IDX3173"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>contains1/2:</B> <DD><A NAME="IDX3174"></A> <P> <STRONG>Usage:</STRONG> <UL> <LI><EM>Description:</EM> First membership. </UL> </DL> <P> <A NAME="IDX3175"></A> <A NAME="IDX3176"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>nocontainsx/2:</B> <DD><A NAME="IDX3177"></A> <P> <STRONG>Usage:</STRONG> <CODE>nocontainsx(L, X)</CODE> <UL> <LI><EM>Description:</EM> <CODE>X</CODE> is not identical to any element of <CODE>L</CODE>. </UL> </DL> <P> <A NAME="IDX3178"></A> <A NAME="IDX3179"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>last/2:</B> <DD><A NAME="IDX3180"></A> <P> <STRONG>Usage:</STRONG> <CODE>last(L, X)</CODE> <UL> <LI><EM>Description:</EM> <CODE>X</CODE> is the last element of list <CODE>L</CODE>. </UL> </DL> <P> <A NAME="IDX3181"></A> <A NAME="IDX3182"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>list_lookup/3:</B> <DD><A NAME="IDX3183"></A> <P> <STRONG>Usage:</STRONG> <CODE>list_lookup(List, Key, Value)</CODE> <UL> <LI><EM>Description:</EM> Same as <A NAME="IDX3184"></A> <CODE>list_lookup/4</CODE>, but use <A NAME="IDX3185"></A> <CODE>-/2</CODE> as functor. </UL> </DL> <P> <A NAME="IDX3186"></A> <A NAME="IDX3187"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>list_lookup/4:</B> <DD><A NAME="IDX3188"></A> <P> <STRONG>Usage:</STRONG> <CODE>list_lookup(List, Functor, Key, Value)</CODE> <UL> <LI><EM>Description:</EM> Look up <CODE>Functor</CODE>(<CODE>Key</CODE>,<CODE>Value</CODE>) pair in variable ended key-value pair list <CODE>L</CODE> or else add it at the end. </UL> </DL> <P> <A NAME="IDX3189"></A> <A NAME="IDX3190"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>intset_insert/3:</B> <DD><A NAME="IDX3191"></A> <P> <STRONG>Usage:</STRONG> <CODE>intset_insert(A, B, Set)</CODE> <UL> <LI><EM>Description:</EM> Insert the element <CODE>B</CODE> in the ordered set of numbers <CODE>A</CODE>. </UL> </DL> <P> <A NAME="IDX3192"></A> <A NAME="IDX3193"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>intset_delete/3:</B> <DD><A NAME="IDX3194"></A> <P> <STRONG>Usage:</STRONG> <CODE>intset_delete(A, B, Set)</CODE> <UL> <LI><EM>Description:</EM> Delete from the ordered set <CODE>A</CODE> the element <CODE>B</CODE>. </UL> </DL> <P> <A NAME="IDX3195"></A> <A NAME="IDX3196"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>intset_in/2:</B> <DD><A NAME="IDX3197"></A> <P> <STRONG>Usage:</STRONG> <CODE>intset_in(E, Set)</CODE> <UL> <LI><EM>Description:</EM> Succeds iff <CODE>E</CODE> is element of <CODE>Set</CODE> </UL> </DL> <P> <A NAME="IDX3198"></A> <A NAME="IDX3199"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>intset_sequence/3:</B> <DD><A NAME="IDX3200"></A> <P> <STRONG>Usage:</STRONG> <CODE>intset_sequence(N, L1, L2)</CODE> <UL> <LI><EM>Description:</EM> Generates an ordered set of numbers from 0 to <CODE>N</CODE>-1, and append it to <CODE>L1</CODE>. </UL> </DL> <P> <A NAME="IDX3201"></A> <A NAME="IDX3202"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>intersection/3:</B> <DD><A NAME="IDX3203"></A> <P> <STRONG>Usage:</STRONG> <CODE>intersection(+List1, +List2, -List)</CODE> <UL> <LI><EM>Description:</EM> <CODE>List</CODE> has the elements which are both in <CODE>List1</CODE> and <CODE>List2</CODE>. </UL> </DL> <P> <A NAME="IDX3204"></A> <A NAME="IDX3205"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>union/3:</B> <DD><A NAME="IDX3206"></A> <P> <STRONG>Usage:</STRONG> <CODE>union(+List1, +List2, -List)</CODE> <UL> <LI><EM>Description:</EM> <CODE>List</CODE> has the elements which are in <CODE>List1</CODE> followed by the elements which are in <CODE>List2</CODE> but not in <CODE>List1</CODE>. </UL> </DL> <P> <A NAME="IDX3207"></A> <A NAME="IDX3208"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>difference/3:</B> <DD><A NAME="IDX3209"></A> <P> <STRONG>Usage:</STRONG> <CODE>difference(+List1, +List2, -List)</CODE> <UL> <LI><EM>Description:</EM> <CODE>List</CODE> has the elements which are in <CODE>List1</CODE> but not in <CODE>List2</CODE>. </UL> </DL> <P> <A NAME="IDX3210"></A> <A NAME="IDX3211"></A> <DL> <DT><span class="define">PROPERTY:</span> <B>sublist/2:</B> <DD><A NAME="IDX3212"></A> <P> <STRONG>Usage:</STRONG> <CODE>sublist(List1, List2)</CODE> <UL> <LI><EM>Description:</EM> <CODE>List2</CODE> contains all the elements of <CODE>List1</CODE>. <LI><EM>If the following properties should hold at call time:</EM> <CODE>List2</CODE> is currently a term which is not a free variable. (<CODE>term_typing:nonvar/1</CODE>) </UL> </DL> <P> <A NAME="IDX3213"></A> <A NAME="IDX3214"></A> <DL> <DT><span class="define">PROPERTY:</span> <B>subordlist/2:</B> <DD><A NAME="IDX3215"></A> <P> <STRONG>Usage:</STRONG> <CODE>subordlist(List1, List2)</CODE> <UL> <LI><EM>Description:</EM> <CODE>List2</CODE> contains all the elements of <CODE>List1</CODE> in the same order. <LI><EM>If the following properties should hold at call time:</EM> <CODE>List2</CODE> is currently a term which is not a free variable. (<CODE>term_typing:nonvar/1</CODE>) </UL> </DL> <P> <A NAME="IDX3216"></A> <A NAME="IDX3217"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>equal_lists/2:</B> <DD><A NAME="IDX3218"></A> <P> <STRONG>Usage:</STRONG> <CODE>equal_lists(+List1, +List2)</CODE> <UL> <LI><EM>Description:</EM> <CODE>List1</CODE> has all the elements of <CODE>List2</CODE>, and vice versa. </UL> </DL> <P> <A NAME="IDX3219"></A> <A NAME="IDX3220"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>list_to_list_of_lists/2:</B> <DD><A NAME="IDX3221"></A> <P> <STRONG>Usage:</STRONG> <CODE>list_to_list_of_lists(+List, -LList)</CODE> <UL> <LI><EM>Description:</EM> <CODE>LList</CODE> is the list of one element lists with elements of <CODE>List</CODE>. </UL> </DL> <P> <A NAME="IDX3222"></A> <A NAME="IDX3223"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>powerset/2:</B> <DD><A NAME="IDX3224"></A> <P> <STRONG>Usage:</STRONG> <CODE>powerset(+List, -LList)</CODE> <UL> <LI><EM>Description:</EM> <CODE>LList</CODE> is the powerset of <CODE>List</CODE>, i.e., the list of all lists which have elements of <CODE>List</CODE>. If <CODE>List</CODE> is ordered, <CODE>LList</CODE> and all its elements are ordered. </UL> </DL> <P> <A NAME="IDX3225"></A> <A NAME="IDX3226"></A> <DL> <DT><span class="define">PREDICATE:</span> <B>cross_product/2:</B> <DD><A NAME="IDX3227"></A> <P> <STRONG>Usage:</STRONG> <CODE>cross_product(+LList, -List)</CODE> <UL> <LI><EM>Description:</EM> <CODE>List</CODE> is the cartesian product of the lists in <CODE>LList</CODE>, that is, the list of lists formed with one element of each list in <CODE>LList</CODE>, in the same order. </UL> </DL> <P><HR><P> Go to the <A HREF="ciao_1.html">first</A>, <A HREF="ciao_47.html">previous</A>, <A HREF="ciao_49.html">next</A>, <A HREF="ciao_241.html">last</A> section, <A HREF="ciao_toc.html">table of contents</A>. </BODY> </HTML>