1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3 4 5<html xmlns="http://www.w3.org/1999/xhtml"> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 8 9 <title>reverse_fold — Boost.HigherOrderFunctions 0.6 documentation</title> 10 11 <link rel="stylesheet" href="../../../_static/boostbook.css" type="text/css" /> 12 <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> 13 14 <script type="text/javascript"> 15 var DOCUMENTATION_OPTIONS = { 16 URL_ROOT: '../../../', 17 VERSION: '0.6', 18 COLLAPSE_INDEX: false, 19 FILE_SUFFIX: '.html', 20 HAS_SOURCE: true, 21 SOURCELINK_SUFFIX: '.txt' 22 }; 23 </script> 24 <script type="text/javascript" src="../../../_static/jquery.js"></script> 25 <script type="text/javascript" src="../../../_static/underscore.js"></script> 26 <script type="text/javascript" src="../../../_static/doctools.js"></script> 27 <link rel="index" title="Index" href="../../../genindex.html" /> 28 <link rel="search" title="Search" href="../../../search.html" /> 29 <link rel="next" title="rotate" href="rotate.html" /> 30 <link rel="prev" title="reveal" href="reveal.html" /> 31 </head> 32 <body role="document"> 33<table cellpadding="2" width="100%"><tr> 34<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86"src="../../../_static/boost.png"></td> 35</tr></table> 36 37<div class="spirit-nav"> 38<a accesskey="p" href="reveal.html"><img src="../../../_static/prev.png" alt="Prev"></a> 39<a accesskey="u" href="../../../doc/src/reference.html"><img src="../../../_static/up.png" alt="Up"></a> 40<a accesskey="h" href="../../../doc/index.html"><img src="../../../_static/home.png" alt="Home"></a> 41<a accesskey="n" href="rotate.html"><img src="../../../_static/next.png" alt="Next"></a> 42</div> 43 44 45 <div class="document"> 46 <div class="chapter"> 47 <div class="body" role="main"> 48 49 <div class="section" id="reverse-fold"> 50<h1>reverse_fold<a class="headerlink" href="#reverse-fold" title="Permalink to this headline">¶</a></h1> 51<div class="section" id="header"> 52<h2>Header<a class="headerlink" href="#header" title="Permalink to this headline">¶</a></h2> 53<div class="highlight-cpp"><div class="highlight"><pre><span class="cp">#include</span> <span class="cpf"><boost/hof/reverse_fold.hpp></span><span class="cp"></span> 54</pre></div> 55</div> 56</div> 57<div class="section" id="description"> 58<h2>Description<a class="headerlink" href="#description" title="Permalink to this headline">¶</a></h2> 59<p>The <code class="docutils literal"><span class="pre">reverse_fold</span></code> function adaptor uses a binary function to apply a 60reverse [fold] 61(https://en.wikipedia.org/wiki/Fold_%28higher-order_function%29)(ie right 62fold in functional programming terms) operation to the arguments passed to 63the function. Additionally, an optional initial state can be provided, 64otherwise the first argument is used as the initial state.</p> 65<p>The arguments to the binary function, take first the state and then the 66argument.</p> 67</div> 68<div class="section" id="synopsis"> 69<h2>Synopsis<a class="headerlink" href="#synopsis" title="Permalink to this headline">¶</a></h2> 70<div class="highlight-cpp"><div class="highlight"><pre><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">F</span><span class="p">,</span> <span class="k">class</span> <span class="nc">State</span><span class="o">></span> 71<span class="k">constexpr</span> <span class="n">reverse_fold_adaptor</span><span class="o"><</span><span class="n">F</span><span class="p">,</span> <span class="n">State</span><span class="o">></span> <span class="n">reverse_fold</span><span class="p">(</span><span class="n">F</span> <span class="n">f</span><span class="p">,</span> <span class="n">State</span> <span class="n">s</span><span class="p">);</span> 72 73<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">F</span><span class="o">></span> 74<span class="k">constexpr</span> <span class="n">reverse_fold_adaptor</span><span class="o"><</span><span class="n">F</span><span class="o">></span> <span class="n">reverse_fold</span><span class="p">(</span><span class="n">F</span> <span class="n">f</span><span class="p">);</span> 75</pre></div> 76</div> 77</div> 78<div class="section" id="semantics"> 79<h2>Semantics<a class="headerlink" href="#semantics" title="Permalink to this headline">¶</a></h2> 80<div class="highlight-cpp"><div class="highlight"><pre><span class="n">assert</span><span class="p">(</span><span class="n">reverse_fold</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">z</span><span class="p">)()</span> <span class="o">==</span> <span class="n">z</span><span class="p">);</span> 81<span class="n">assert</span><span class="p">(</span><span class="n">reverse_fold</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">z</span><span class="p">)(</span><span class="n">x</span><span class="p">,</span> <span class="n">xs</span><span class="p">...)</span> <span class="o">==</span> <span class="n">f</span><span class="p">(</span><span class="n">reverse_fold</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">z</span><span class="p">)(</span><span class="n">xs</span><span class="p">...),</span> <span class="n">x</span><span class="p">));</span> 82<span class="n">assert</span><span class="p">(</span><span class="n">reverse_fold</span><span class="p">(</span><span class="n">f</span><span class="p">)(</span><span class="n">x</span><span class="p">)</span> <span class="o">==</span> <span class="n">x</span><span class="p">);</span> 83<span class="n">assert</span><span class="p">(</span><span class="n">reverse_fold</span><span class="p">(</span><span class="n">f</span><span class="p">)(</span><span class="n">x</span><span class="p">,</span> <span class="n">xs</span><span class="p">...)</span> <span class="o">==</span> <span class="n">f</span><span class="p">(</span><span class="n">reverse_fold</span><span class="p">(</span><span class="n">f</span><span class="p">)(</span><span class="n">xs</span><span class="p">...),</span> <span class="n">x</span><span class="p">));</span> 84</pre></div> 85</div> 86</div> 87<div class="section" id="requirements"> 88<h2>Requirements<a class="headerlink" href="#requirements" title="Permalink to this headline">¶</a></h2> 89<p>State must be:</p> 90<ul class="simple"> 91<li>CopyConstructible</li> 92</ul> 93<p>F must be:</p> 94<ul class="simple"> 95<li><a class="reference internal" href="../../../doc/src/concepts.html#binaryinvocable"><span class="std std-ref">BinaryInvocable</span></a></li> 96<li>MoveConstructible</li> 97</ul> 98</div> 99<div class="section" id="example"> 100<h2>Example<a class="headerlink" href="#example" title="Permalink to this headline">¶</a></h2> 101<div class="highlight-cpp"><div class="highlight"><pre><span class="cp">#include</span> <span class="cpf"><boost/hof.hpp></span><span class="cp"></span> 102<span class="cp">#include</span> <span class="cpf"><cassert></span><span class="cp"></span> 103 104<span class="k">struct</span> <span class="n">max_f</span> 105<span class="p">{</span> 106 <span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">T</span><span class="p">,</span> <span class="k">class</span> <span class="nc">U</span><span class="o">></span> 107 <span class="k">constexpr</span> <span class="n">T</span> <span class="k">operator</span><span class="p">()(</span><span class="n">T</span> <span class="n">x</span><span class="p">,</span> <span class="n">U</span> <span class="n">y</span><span class="p">)</span> <span class="k">const</span> 108 <span class="p">{</span> 109 <span class="k">return</span> <span class="n">x</span> <span class="o">></span> <span class="n">y</span> <span class="o">?</span> <span class="nl">x</span> <span class="p">:</span> <span class="n">y</span><span class="p">;</span> 110 <span class="p">}</span> 111<span class="p">};</span> 112 113<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> 114 <span class="n">assert</span><span class="p">(</span><span class="n">boost</span><span class="o">::</span><span class="n">hof</span><span class="o">::</span><span class="n">reverse_fold</span><span class="p">(</span><span class="n">max_f</span><span class="p">())(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span> <span class="o">==</span> <span class="mi">5</span><span class="p">);</span> 115<span class="p">}</span> 116</pre></div> 117</div> 118</div> 119<div class="section" id="references"> 120<h2>References<a class="headerlink" href="#references" title="Permalink to this headline">¶</a></h2> 121<ul class="simple"> 122<li><a class="reference internal" href="../../../doc/src/more_examples.html#projections"><span class="std std-ref">Projections</span></a></li> 123<li><a class="reference internal" href="../../../doc/src/point_free.html#variadic-print"><span class="std std-ref">Variadic print</span></a></li> 124</ul> 125</div> 126</div> 127 128 129 </div> 130 </div> 131 <div class="clearer"></div> 132 </div> 133 <div class="footer" role="contentinfo"> 134 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 135 <td align="left"></td> 136 <td align="right"><div class="copyright-footer"> 137 © Copyright 2016, Paul Fultz II. 138 139 Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.6. 140 <p>Distributed under the Boost Software License, Version 1.0. 141 (See accompanying file <code class="filename">LICENSE_1_0.txt</code> or copy at 142 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) 143 </p> 144 </div></td> 145 </tr></table> 146 </div> 147 </body> 148</html>