1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Chapter 1. Phoenix 3.2.0</title> 5<link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="index.html" title="Chapter 1. Phoenix 3.2.0"> 8<link rel="next" href="phoenix/release_notes.html" title="Release Notes"> 9</head> 10<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 11<table cellpadding="2" width="100%"><tr> 12<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td> 13<td align="center"><a href="../../../../index.html">Home</a></td> 14<td align="center"><a href="../../../../libs/libraries.htm">Libraries</a></td> 15<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 16<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 17<td align="center"><a href="../../../../more/index.htm">More</a></td> 18</tr></table> 19<hr> 20<div class="spirit-nav"><a accesskey="n" href="phoenix/release_notes.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div> 21<div class="chapter"> 22<div class="titlepage"><div> 23<div><h2 class="title"> 24<a name="phoenix"></a>Chapter 1. Phoenix 3.2.0</h2></div> 25<div><div class="author"><h3 class="author"> 26<span class="firstname">Joel</span> <span class="surname">de Guzman</span> 27</h3></div></div> 28<div><div class="author"><h3 class="author"> 29<span class="firstname">Dan</span> <span class="surname">Marsden</span> 30</h3></div></div> 31<div><div class="author"><h3 class="author"> 32<span class="firstname">Thomas</span> <span class="surname">Heller</span> 33</h3></div></div> 34<div><div class="author"><h3 class="author"> 35<span class="firstname">John</span> <span class="surname">Fletcher</span> 36</h3></div></div> 37<div><p class="copyright">Copyright © 2002-2005, 2010, 2014, 2015 Joel de Guzman, Dan Marsden, Thomas 38 Heller, John Fletcher</p></div> 39<div><div class="legalnotice"> 40<a name="phoenix.legal"></a><p> 41 Distributed under the Boost Software License, Version 1.0. (See accompanying 42 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>) 43 </p> 44</div></div> 45</div></div> 46<div class="toc"> 47<p><b>Table of Contents</b></p> 48<dl class="toc"> 49<dt><span class="section"><a href="phoenix/release_notes.html">Release Notes</a></span></dt> 50<dt><span class="section"><a href="phoenix/what_s_new.html">What's New</a></span></dt> 51<dd><dl> 52<dt><span class="section"><a href="phoenix/what_s_new/phoenix___warning_on__lambda_and_let_.html">Phoenix 53 - warning on <span class="bold"><strong>lambda and let</strong></span></a></span></dt> 54<dt><span class="section"><a href="phoenix/what_s_new/phoenix_3_2_0__boost_1_58_0_.html">Phoenix 55 3.2.0 (Boost 1.58.0)</a></span></dt> 56<dt><span class="section"><a href="phoenix/what_s_new/phoenix_3_1_1.html">Phoenix 3.1.1</a></span></dt> 57<dt><span class="section"><a href="phoenix/what_s_new/phoenix_3_1_0.html">Phoenix 3.1.0</a></span></dt> 58<dt><span class="section"><a href="phoenix/what_s_new/phoenix_3_0_6__boost_1_57_0_.html">Phoenix 59 3.0.6 (Boost 1.57.0)</a></span></dt> 60<dt><span class="section"><a href="phoenix/what_s_new/phoenix_3_0_5.html">Phoenix 3.0.5</a></span></dt> 61<dt><span class="section"><a href="phoenix/what_s_new/phoenix_3_0.html">Phoenix 3.0</a></span></dt> 62</dl></dd> 63<dt><span class="section"><a href="phoenix/introduction.html">Introduction</a></span></dt> 64<dt><span class="section"><a href="phoenix/starter_kit.html">Starter Kit</a></span></dt> 65<dd><dl> 66<dt><span class="section"><a href="phoenix/starter_kit/values.html">Values</a></span></dt> 67<dt><span class="section"><a href="phoenix/starter_kit/references.html">References</a></span></dt> 68<dt><span class="section"><a href="phoenix/starter_kit/arguments.html">Arguments</a></span></dt> 69<dt><span class="section"><a href="phoenix/starter_kit/lazy_operators.html">Lazy Operators</a></span></dt> 70<dt><span class="section"><a href="phoenix/starter_kit/lazy_statements.html">Lazy Statements</a></span></dt> 71<dt><span class="section"><a href="phoenix/starter_kit/construct__new__delete__casts.html">Construct, 72 New, Delete, Casts</a></span></dt> 73<dt><span class="section"><a href="phoenix/starter_kit/lazy_functions.html">Lazy Functions</a></span></dt> 74<dt><span class="section"><a href="phoenix/starter_kit/more.html">More</a></span></dt> 75</dl></dd> 76<dt><span class="section"><a href="phoenix/basics.html">Basics</a></span></dt> 77<dt><span class="section"><a href="phoenix/organization.html">Organization</a></span></dt> 78<dt><span class="section"><a href="phoenix/actor.html">Actor</a></span></dt> 79<dt><span class="section"><a href="phoenix/modules.html">Modules</a></span></dt> 80<dd><dl> 81<dt><span class="section"><a href="phoenix/modules/core.html">Core</a></span></dt> 82<dd><dl> 83<dt><span class="section"><a href="phoenix/modules/core/values.html">Values</a></span></dt> 84<dt><span class="section"><a href="phoenix/modules/core/references.html">References</a></span></dt> 85<dt><span class="section"><a href="phoenix/modules/core/arguments.html">Arguments</a></span></dt> 86<dt><span class="section"><a href="phoenix/modules/core/nothing.html">Nothing</a></span></dt> 87</dl></dd> 88<dt><span class="section"><a href="phoenix/modules/function.html">Function</a></span></dt> 89<dd><dl><dt><span class="section"><a href="phoenix/modules/function/adapting_functions.html">Adapting 90 Functions</a></span></dt></dl></dd> 91<dt><span class="section"><a href="phoenix/modules/operator.html">Operator</a></span></dt> 92<dt><span class="section"><a href="phoenix/modules/statement.html">Statement</a></span></dt> 93<dd><dl> 94<dt><span class="section"><a href="phoenix/modules/statement/block_statement.html">Block Statement</a></span></dt> 95<dt><span class="section"><a href="phoenix/modules/statement/if__statement.html">if_ Statement</a></span></dt> 96<dt><span class="section"><a href="phoenix/modules/statement/___if_else_____statement.html">if_else_ Statement</a></span></dt> 97<dt><span class="section"><a href="phoenix/modules/statement/switch__statement.html">switch_ 98 Statement</a></span></dt> 99<dt><span class="section"><a href="phoenix/modules/statement/while__statement.html">while_ 100 Statement</a></span></dt> 101<dt><span class="section"><a href="phoenix/modules/statement/___do_while_____statement.html">do_while_ Statement</a></span></dt> 102<dt><span class="section"><a href="phoenix/modules/statement/for_statement.html">for_ Statement</a></span></dt> 103<dt><span class="section"><a href="phoenix/modules/statement/try__catch__statement.html">try_ 104 catch_ Statement</a></span></dt> 105<dt><span class="section"><a href="phoenix/modules/statement/throw_.html">throw_</a></span></dt> 106</dl></dd> 107<dt><span class="section"><a href="phoenix/modules/object.html">Object</a></span></dt> 108<dd><dl> 109<dt><span class="section"><a href="phoenix/modules/object/construction.html">Construction</a></span></dt> 110<dt><span class="section"><a href="phoenix/modules/object/new.html">New</a></span></dt> 111<dt><span class="section"><a href="phoenix/modules/object/delete.html">Delete</a></span></dt> 112<dt><span class="section"><a href="phoenix/modules/object/casts.html">Casts</a></span></dt> 113</dl></dd> 114<dt><span class="section"><a href="phoenix/modules/scope.html">Scope</a></span></dt> 115<dd><dl> 116<dt><span class="section"><a href="phoenix/modules/scope/local_variables.html">Local Variables</a></span></dt> 117<dt><span class="section"><a href="phoenix/modules/scope/let.html">let</a></span></dt> 118<dt><span class="section"><a href="phoenix/modules/scope/lambda.html">lambda</a></span></dt> 119</dl></dd> 120<dt><span class="section"><a href="phoenix/modules/bind.html">Bind</a></span></dt> 121<dd><dl> 122<dt><span class="section"><a href="phoenix/modules/bind/binding_function_objects.html">Binding 123 Function Objects</a></span></dt> 124<dt><span class="section"><a href="phoenix/modules/bind/binding_functions.html">Binding Functions</a></span></dt> 125<dt><span class="section"><a href="phoenix/modules/bind/binding_member_functions.html">Binding 126 Member Functions</a></span></dt> 127<dt><span class="section"><a href="phoenix/modules/bind/binding_member_variables.html">Binding 128 Member Variables</a></span></dt> 129<dt><span class="section"><a href="phoenix/modules/bind/compatibility_with_boost_bind.html">Compatibility 130 with Boost.Bind</a></span></dt> 131</dl></dd> 132<dt><span class="section"><a href="phoenix/modules/stl.html">STL</a></span></dt> 133<dd><dl> 134<dt><span class="section"><a href="phoenix/modules/stl/container.html">Container</a></span></dt> 135<dt><span class="section"><a href="phoenix/modules/stl/algorithm.html">Algorithm</a></span></dt> 136</dl></dd> 137</dl></dd> 138<dt><span class="section"><a href="phoenix/inside.html">Inside Phoenix</a></span></dt> 139<dd><dl> 140<dt><span class="section"><a href="phoenix/inside/actor.html">Actors in Detail</a></span></dt> 141<dt><span class="section"><a href="phoenix/inside/expression.html">Phoenix Expressions</a></span></dt> 142<dd><dl><dt><span class="section"><a href="phoenix/inside/expression/boilerplate_macros.html">Boilerplate 143 Macros</a></span></dt></dl></dd> 144<dt><span class="section"><a href="phoenix/inside/actions.html">More on Actions</a></span></dt> 145<dt><span class="section"><a href="phoenix/inside/rules.html">Predefined Expressions and Rules</a></span></dt> 146<dt><span class="section"><a href="phoenix/inside/custom_terminals.html">Custom Terminals</a></span></dt> 147<dt><span class="section"><a href="phoenix/inside/placeholder_unification.html">Placeholder Unification</a></span></dt> 148</dl></dd> 149<dt><span class="section"><a href="phoenix/examples.html">Advanced Examples</a></span></dt> 150<dd><dl> 151<dt><span class="section"><a href="phoenix/examples/extending_actors.html">Extending Actors</a></span></dt> 152<dt><span class="section"><a href="phoenix/examples/adding_an_expression.html">Adding an expression</a></span></dt> 153<dt><span class="section"><a href="phoenix/examples/transforming_the_expression_tree.html">Transforming 154 the Expression Tree</a></span></dt> 155</dl></dd> 156<dt><span class="section"><a href="phoenix/lazy_list.html">Lazy List</a></span></dt> 157<dd><dl> 158<dt><span class="section"><a href="phoenix/lazy_list/background.html">Background</a></span></dt> 159<dt><span class="section"><a href="phoenix/lazy_list/what_is_provided.html">What is provided</a></span></dt> 160<dt><span class="section"><a href="phoenix/lazy_list/tutorial_with_examples.html">Tutorial with 161 examples</a></span></dt> 162<dd><dl> 163<dt><span class="section"><a href="phoenix/lazy_list/tutorial_with_examples/arithmetic_functions.html">Arithmetic 164 functions</a></span></dt> 165<dt><span class="section"><a href="phoenix/lazy_list/tutorial_with_examples/list_generation.html">List 166 Generation</a></span></dt> 167</dl></dd> 168<dt><span class="section"><a href="phoenix/lazy_list/exceptions.html">Exceptions</a></span></dt> 169<dt><span class="section"><a href="phoenix/lazy_list/implementation_details.html">Implementation 170 Details</a></span></dt> 171<dt><span class="section"><a href="phoenix/lazy_list/testing.html">Testing</a></span></dt> 172<dt><span class="section"><a href="phoenix/lazy_list/where_next_.html">Where Next?</a></span></dt> 173</dl></dd> 174<dt><span class="section"><a href="phoenix/maintenance.html">Maintenance</a></span></dt> 175<dd><dl> 176<dt><span class="section"><a href="phoenix/maintenance/background.html">Background</a></span></dt> 177<dt><span class="section"><a href="phoenix/maintenance/my_understanding_of_how_maintenance_works.html">My 178 Understanding of how maintenance works</a></span></dt> 179<dt><span class="section"><a href="phoenix/maintenance/method_in_use.html">Method in use</a></span></dt> 180<dt><span class="section"><a href="phoenix/maintenance/experience.html">Experience</a></span></dt> 181<dd><dl> 182<dt><span class="section"><a href="phoenix/maintenance/experience/maintenance_tools.html">Maintenance 183 Tools</a></span></dt> 184<dt><span class="section"><a href="phoenix/maintenance/experience/bugs_to_be_fixed.html">Bugs 185 to be fixed</a></span></dt> 186<dt><span class="section"><a href="phoenix/maintenance/experience/compilers.html">Compilers</a></span></dt> 187</dl></dd> 188</dl></dd> 189<dt><span class="section"><a href="phoenix/wrap_up.html">Wrap Up</a></span></dt> 190<dt><span class="section"><a href="phoenix/acknowledgments.html">Acknowledgments</a></span></dt> 191<dt><span class="section"><a href="phoenix/references.html">References</a></span></dt> 192</dl> 193</div> 194<h2> 195<a name="phoenix.h0"></a> 196 <span class="phrase"><a name="phoenix.preface"></a></span><a class="link" href="index.html#phoenix.preface">Preface</a> 197 </h2> 198<div class="blockquote"><blockquote class="blockquote"><p> 199 <span class="emphasis"><em>Functional programming is so called because a program consists entirely 200 of functions. The main program itself is written as a function which receives 201 the program's input as its argument and delivers the program's output as its 202 result. Typically the main function is defined in terms of other functions, 203 which in turn are defined in terms of still more functions until at the bottom 204 level the functions are language primitives.</em></span> 205 </p></blockquote></div> 206<div class="blockquote"><blockquote class="blockquote"><p> 207 <span class="bold"><strong>John Hughes</strong></span>-- <span class="emphasis"><em>Why Functional Programming 208 Matters</em></span> 209 </p></blockquote></div> 210<p> 211 <span class="inlinemediaobject"><img src="images/lambda_cpp.png"></span> 212 </p> 213<h3> 214<a name="phoenix.h1"></a> 215 <span class="phrase"><a name="phoenix.description"></a></span><a class="link" href="index.html#phoenix.description">Description</a> 216 </h3> 217<p> 218 Phoenix enables Functional Programming (FP) in C++. The design and implementation 219 of Phoenix is highly influenced by <a href="http://cgi.di.uoa.gr/~smaragd/fc++/" target="_top">FC++</a> 220 by Yannis Smaragdakis and Brian McNamara and the <a href="http://www.boost.org/libs/lambda/doc/index.html" target="_top">BLL</a> 221 (Boost Lambda Library) by Jaakko Jaarvi and Gary Powell. Phoenix is a blend of 222 FC++ and BLL using the implementation techniques used in the <a href="http://spirit.sourceforge.net" target="_top">Spirit</a> 223 inline parser. 224 </p> 225<p> 226 Phoenix is a header only library. It is extremely modular by design. One can 227 extract and use only a small subset of the full library, literally tearing the 228 library into small pieces, without fear that the pieces won't work anymore. The 229 library is organized in highly independent modules and layers. 230 </p> 231<h3> 232<a name="phoenix.h2"></a> 233 <span class="phrase"><a name="phoenix.how_to_use_this_manual"></a></span><a class="link" href="index.html#phoenix.how_to_use_this_manual">How 234 to use this manual</a> 235 </h3> 236<p> 237 The Phoenix library is organized in logical modules. This documentation provides 238 a user's guide and reference for each module in the library. A simple and clear 239 code example is worth a hundred lines of documentation; therefore, the user's 240 guide is presented with abundant examples annotated and explained in step-wise 241 manner. The user's guide is based on examples: lots of them. 242 </p> 243<p> 244 As much as possible, forward information (i.e. citing a specific piece of information 245 that has not yet been discussed) is avoided in the user's manual portion of each 246 module. In many cases, though, it is unavoidable that advanced but related topics 247 be interspersed with the normal flow of discussion. To alleviate this problem, 248 topics categorized as "advanced" may be skipped at first reading. 249 </p> 250<p> 251 Some icons are used to mark certain topics indicative of their relevance. These 252 icons precede some text to indicate: 253 </p> 254<div class="table"> 255<a name="phoenix.t0"></a><p class="title"><b>Table 1.1. Icons</b></p> 256<div class="table-contents"><table class="table" summary="Icons"> 257<colgroup> 258<col> 259<col> 260<col> 261</colgroup> 262<thead><tr> 263<th> 264 <p> 265 Icon 266 </p> 267 </th> 268<th> 269 <p> 270 Name 271 </p> 272 </th> 273<th> 274 <p> 275 Meaning 276 </p> 277 </th> 278</tr></thead> 279<tbody> 280<tr> 281<td> 282 <p> 283 <span class="inlinemediaobject"><img src="images/note.png"></span> 284 </p> 285 </td> 286<td> 287 <p> 288 Note 289 </p> 290 </td> 291<td> 292 <p> 293 Information provided is auxiliary but will give the reader a deeper 294 insight into a specific topic. May be skipped. 295 </p> 296 </td> 297</tr> 298<tr> 299<td> 300 <p> 301 <span class="inlinemediaobject"><img src="images/alert.png"></span> 302 </p> 303 </td> 304<td> 305 <p> 306 Alert 307 </p> 308 </td> 309<td> 310 <p> 311 Information provided is of utmost importance. 312 </p> 313 </td> 314</tr> 315<tr> 316<td> 317 <p> 318 <span class="inlinemediaobject"><img src="images/tip.png"></span> 319 </p> 320 </td> 321<td> 322 <p> 323 Tip 324 </p> 325 </td> 326<td> 327 <p> 328 A potentially useful and helpful piece of information. 329 </p> 330 </td> 331</tr> 332</tbody> 333</table></div> 334</div> 335<br class="table-break"><div class="blurb"> 336<div class="titlepage"><div><div><p class="title"><b></b></p></div></div></div> 337<p> 338 <span class="inlinemediaobject"><img src="images/note.png"></span> 339 Unless otherwise noted <code class="computeroutput"><span class="keyword">using</span> <span class="keyword">namespace</span> 340 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">;</span></code> is 341 assumed 342 </p> 343</div> 344<h3> 345<a name="phoenix.h3"></a> 346 <span class="phrase"><a name="phoenix._emphasis_role__bold___emphasis____to_joel_s_dear_daughter__phoenix__emphasis___emphasis_"></a></span><a class="link" href="index.html#phoenix._emphasis_role__bold___emphasis____to_joel_s_dear_daughter__phoenix__emphasis___emphasis_"><span class="bold"><strong><span class="emphasis"><em>...To Joel's dear daughter, Phoenix</em></span></strong></span></a> 347 </h3> 348</div> 349<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 350<td align="left"><p><small>Last revised: August 11, 2020 at 14:59:44 GMT</small></p></td> 351<td align="right"><div class="copyright-footer"></div></td> 352</tr></table> 353<hr> 354<div class="spirit-nav"><a accesskey="n" href="phoenix/release_notes.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div> 355</body> 356</html> 357