blob: baf1cba7d3f1a2a8d41d7ec1f9d61ee4455e4577 [file] [log] [blame]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Lazy List</title>
<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Phoenix 3.2.0">
<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Phoenix 3.2.0">
<link rel="prev" href="examples/transforming_the_expression_tree.html" title="Transforming the Expression Tree">
<link rel="next" href="lazy_list/background.html" title="Background">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="examples/transforming_the_expression_tree.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="lazy_list/background.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="phoenix.lazy_list"></a><a class="link" href="lazy_list.html" title="Lazy List">Lazy List</a>
</h2></div></div></div>
<div class="toc"><dl class="toc">
<dt><span class="section"><a href="lazy_list/background.html">Background</a></span></dt>
<dt><span class="section"><a href="lazy_list/what_is_provided.html">What is provided</a></span></dt>
<dt><span class="section"><a href="lazy_list/tutorial_with_examples.html">Tutorial with
examples</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="lazy_list/tutorial_with_examples/arithmetic_functions.html">Arithmetic
functions</a></span></dt>
<dt><span class="section"><a href="lazy_list/tutorial_with_examples/list_generation.html">List
Generation</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="lazy_list/exceptions.html">Exceptions</a></span></dt>
<dt><span class="section"><a href="lazy_list/implementation_details.html">Implementation
Details</a></span></dt>
<dt><span class="section"><a href="lazy_list/testing.html">Testing</a></span></dt>
<dt><span class="section"><a href="lazy_list/where_next_.html">Where Next?</a></span></dt>
</dl></div>
<h2>
<a name="phoenix.lazy_list.h0"></a>
<span class="phrase"><a name="phoenix.lazy_list.summary"></a></span><a class="link" href="lazy_list.html#phoenix.lazy_list.summary">Summary</a>
</h2>
<p>
Phoenix now has a lazy list implementation which is very similar but not identical
to the implementation provided by <a href="http://cgi.di.uoa.gr/~smaragd/fc++/" target="_top">FC++</a>.
This provides a set of objects defined by list&lt;type&gt;, for example this
which defines an empty list of type int.
</p>
<pre class="programlisting"><span class="identifier">list</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">example</span><span class="special">;</span>
</pre>
<p>
A list can contain zero or more elements of the same type. It can also be declared
using a function returning values of the correct type. Such lists are only
evaluated on demand. A set of functions are defined which enable many ways
of manipulating and using lists. Examples are provided for the features available.
</p>
<p>
Exceptions are provided to deal with certain cases and these can be turned
off if desired. There is a check on the maximum list length which has a default
of 1000 which can be changed by the user.
</p>
<p>
This is an extension to Boost Phoenix which does not change the public interface
except to define new features in the namespace
</p>
<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span>
</pre>
<p>
It has to be explicitly included using the header
</p>
<pre class="programlisting"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">function</span><span class="special">/</span><span class="identifier">lazy_prelude</span><span class="special">.</span><span class="identifier">hpp</span>
</pre>
<h2>
<a name="phoenix.lazy_list.h1"></a>
<span class="phrase"><a name="phoenix.lazy_list.introduction"></a></span><a class="link" href="lazy_list.html#phoenix.lazy_list.introduction">Introduction</a>
</h2>
<p>
Boost Phoenix provides many features of functional_programming. One of the
things which has been missing until now is a lazy list implementation. One
is available in the library <a href="http://cgi.di.uoa.gr/~smaragd/fc++/" target="_top">FC++</a>
which although not part of Boost has many similarities. It has been possible
to reimplement the strategy of the <a href="http://people.cs.umass.edu/~yannis/fc++/New/new_list_implementation.html" target="_top">FC++
List Implementation</a> using the facilties in Phoenix. This provides something
which has up until now not been available anywhere in Phoenix and probably
not anywhere else in Boost. This new implementation is very well integrated
with other features in Phoenix as it uses the same mechanism. In turn that
is well integrated with Boost Function.
</p>
<p>
There is a great deal of material in <a href="http://cgi.di.uoa.gr/~smaragd/fc++/" target="_top">FC++</a>
and it is not proposed to replicate all of it. A great deal has changed since
<a href="http://cgi.di.uoa.gr/~smaragd/fc++/" target="_top">FC++</a> was written and
many things are already available in Phoenix or elsewhere. The emphasis here
is to add to Phoenix in a way which will make it easier to implement functional_programming.
</p>
<p>
Progress is being made in implementing both the basic list&lt;T&gt; and the
functions needed to manipulate lists.
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2005, 2010, 2014, 2015 Joel de Guzman, Dan Marsden, Thomas
Heller, John Fletcher<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="examples/transforming_the_expression_tree.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="lazy_list/background.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>