<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title> - My Blog</title>
    <link rel="self" type="application/atom+xml" href="https://blog.kyleandzoebarton.com/posts/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://blog.kyleandzoebarton.com/posts/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2025-09-13T00:00:00+00:00</updated>
    <id>https://blog.kyleandzoebarton.com/posts/atom.xml</id>
    <entry xml:lang="en">
        <title>For Loops and Folds: How we Iterate in Functional and Non-functional Languages</title>
        <published>2025-09-13T00:00:00+00:00</published>
        <updated>2025-09-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.kyleandzoebarton.com/posts/functional-for-loop/"/>
        <id>https://blog.kyleandzoebarton.com/posts/functional-for-loop/</id>
        
        <content type="html" xml:base="https://blog.kyleandzoebarton.com/posts/functional-for-loop/">&lt;p&gt;Let&#x27;s look at a few use-cases which highlight the big three higher order functions for handling lists:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Given a list of numbers, increase all of the numbers by one&lt;&#x2F;li&gt;
&lt;li&gt;Given a list of numbers, return all the even numbered elements&lt;&#x2F;li&gt;
&lt;li&gt;Given a list of numbers, return the sum of all the elements in the list&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h1 id=&quot;loops&quot;&gt;Loops&lt;a class=&quot;zola-anchor&quot; href=&quot;#loops&quot; aria-label=&quot;Anchor link for: loops&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;p&gt;In a procedural context, these can all be solved with &lt;code&gt;for&lt;&#x2F;code&gt; loops. Let&#x27;s implement in Java.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;add-one-to-elements&quot;&gt;Add one to elements&lt;a class=&quot;zola-anchor&quot; href=&quot;#add-one-to-elements&quot; aria-label=&quot;Anchor link for: add-one-to-elements&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre data-lang=&quot;java&quot; class=&quot;language-java z-code&quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-java&quot;&gt;public&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-modifier z-java&quot;&gt;static&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-class z-java&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;Integer&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-java&quot;&gt;&lt;span class=&quot;z-variable z-function z-java&quot;&gt;addOne&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;Integer&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; givenValues&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-storage z-type z-var z-java&quot;&gt;var&lt;&#x2F;span&gt; returnValues &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-instantiation z-java&quot;&gt;&lt;span class=&quot;z-keyword z-other z-storage z-new z-java&quot;&gt;new&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-class z-java&quot;&gt;ArrayList&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;Integer&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parens z-constructor-arguments z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-loop z-for z-java&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type z-var z-java&quot;&gt;var&lt;&#x2F;span&gt; currentValue &lt;span class=&quot;z-keyword z-operator z-ternary z-java&quot;&gt;:&lt;&#x2F;span&gt; givenValues&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        returnValues&lt;span class=&quot;z-punctuation z-accessor z-dot z-java&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-java&quot;&gt;&lt;span class=&quot;z-variable z-function z-java&quot;&gt;add&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;currentValue &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-return z-java&quot;&gt;return&lt;&#x2F;span&gt; returnValues&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;return-all-the-even-numbered-elements&quot;&gt;Return all the even numbered elements&lt;a class=&quot;zola-anchor&quot; href=&quot;#return-all-the-even-numbered-elements&quot; aria-label=&quot;Anchor link for: return-all-the-even-numbered-elements&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre data-lang=&quot;java&quot; class=&quot;language-java z-code&quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-java&quot;&gt;public&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-modifier z-java&quot;&gt;static&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-class z-java&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;Integer&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-java&quot;&gt;&lt;span class=&quot;z-variable z-function z-java&quot;&gt;evenNumbers&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;Integer&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; givenValues&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-storage z-type z-var z-java&quot;&gt;var&lt;&#x2F;span&gt; returnValues &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-instantiation z-java&quot;&gt;&lt;span class=&quot;z-keyword z-other z-storage z-new z-java&quot;&gt;new&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-class z-java&quot;&gt;ArrayList&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;Integer&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parens z-constructor-arguments z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-loop z-for z-java&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type z-var z-java&quot;&gt;var&lt;&#x2F;span&gt; currentValue &lt;span class=&quot;z-keyword z-operator z-ternary z-java&quot;&gt;:&lt;&#x2F;span&gt; givenValues&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-conditional z-if z-java&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;currentValue &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;%&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;2&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;            returnValues&lt;span class=&quot;z-punctuation z-accessor z-dot z-java&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-java&quot;&gt;&lt;span class=&quot;z-variable z-function z-java&quot;&gt;add&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;currentValue&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        &lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-return z-java&quot;&gt;return&lt;&#x2F;span&gt; returnValues&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;return-the-sum-of-the-values-in-the-list&quot;&gt;Return the sum of the values in the list&lt;a class=&quot;zola-anchor&quot; href=&quot;#return-the-sum-of-the-values-in-the-list&quot; aria-label=&quot;Anchor link for: return-the-sum-of-the-values-in-the-list&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre data-lang=&quot;java&quot; class=&quot;language-java z-code&quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-java&quot;&gt;public&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-modifier z-java&quot;&gt;static&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-class z-java&quot;&gt;Integer&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-java&quot;&gt;&lt;span class=&quot;z-variable z-function z-java&quot;&gt;sumNumbers&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;Integer&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; givenValues&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-storage z-type z-var z-java&quot;&gt;var&lt;&#x2F;span&gt; returnValue &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-loop z-for z-java&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type z-var z-java&quot;&gt;var&lt;&#x2F;span&gt; currentValue &lt;span class=&quot;z-keyword z-operator z-ternary z-java&quot;&gt;:&lt;&#x2F;span&gt; givenValues&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        returnValue &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;+=&lt;&#x2F;span&gt; currentValue&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-return z-java&quot;&gt;return&lt;&#x2F;span&gt; returnValue&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;the-functional-approach-recursion&quot;&gt;The functional approach - recursion&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-functional-approach-recursion&quot; aria-label=&quot;Anchor link for: the-functional-approach-recursion&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;p&gt;In pure functional languages, these problems are generally solved with a recursive approach, since this maps more to a declarative, function-oriented syntax. Let&#x27;s demonstrate in Erlang.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;add-one-to-elements-1&quot;&gt;Add one to elements&lt;a class=&quot;zola-anchor&quot; href=&quot;#add-one-to-elements-1&quot; aria-label=&quot;Anchor link for: add-one-to-elements-1&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;add_one&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;add_one&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-erlang&quot;&gt;+&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;add_one&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;return-all-the-even-numbered-elements-1&quot;&gt;Return all the even numbered elements&lt;a class=&quot;zola-anchor&quot; href=&quot;#return-all-the-even-numbered-elements-1&quot; aria-label=&quot;Anchor link for: return-all-the-even-numbered-elements-1&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;get_evens&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;get_evens&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;    &lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-case z-erlang&quot;&gt;case&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-erlang&quot;&gt;rem&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;2&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-flow z-erlang&quot;&gt;of&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;        &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;0&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;get_evens&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;        &lt;span class=&quot;z-variable z-language z-anonymous z-erlang&quot;&gt;_&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;get_evens&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-conditional z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;return-the-sum-of-the-values-in-the-list-1&quot;&gt;Return the sum of the values in the list&lt;a class=&quot;zola-anchor&quot; href=&quot;#return-the-sum-of-the-values-in-the-list-1&quot; aria-label=&quot;Anchor link for: return-the-sum-of-the-values-in-the-list-1&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;sum_values&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;sum_values&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-erlang&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;sum_values&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;generalizing-to-map-filter-fold&quot;&gt;Generalizing to &lt;code&gt;map&lt;&#x2F;code&gt;, &lt;code&gt;filter&lt;&#x2F;code&gt;, &lt;code&gt;fold&lt;&#x2F;code&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#generalizing-to-map-filter-fold&quot; aria-label=&quot;Anchor link for: generalizing-to-map-filter-fold&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;p&gt;These three examples are concrete use-cases for the &quot;Big Three&quot; higher order functions: &lt;code&gt;map&lt;&#x2F;code&gt;, &lt;code&gt;filter&lt;&#x2F;code&gt;, and &lt;code&gt;fold&lt;&#x2F;code&gt;. So, let&#x27;s abstract out to these functions. Note that Erlang provides these functions out of the box, but for illustrative purposes, let&#x27;s implement them anyway.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;add-one-to-elements-2&quot;&gt;Add one to elements&lt;a class=&quot;zola-anchor&quot; href=&quot;#add-one-to-elements-2&quot; aria-label=&quot;Anchor link for: add-one-to-elements-2&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-comment z-line z-percentage z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-percentage z-erlang&quot;&gt;%&lt;&#x2F;span&gt; abstract out to map
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;add_one&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;map&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-erlang&quot;&gt;fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;X&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;X&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-erlang&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;1&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-declaration z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;map&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-language z-anonymous z-erlang&quot;&gt;_&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;map&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;map&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;return-all-the-even-numbered-elements-2&quot;&gt;Return all the even numbered elements&lt;a class=&quot;zola-anchor&quot; href=&quot;#return-all-the-even-numbered-elements-2&quot; aria-label=&quot;Anchor link for: return-all-the-even-numbered-elements-2&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-comment z-line z-percentage z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-percentage z-erlang&quot;&gt;%&lt;&#x2F;span&gt; abstract out to filter
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;get_evens&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;filter&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-erlang&quot;&gt;fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;X&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;X&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-erlang&quot;&gt;rem&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;2&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-erlang&quot;&gt;=:=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;0&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-declaration z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;filter&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-language z-anonymous z-erlang&quot;&gt;_&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;filter&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Pred&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;    &lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-case z-erlang&quot;&gt;case&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Pred&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-flow z-erlang&quot;&gt;of&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;        &lt;span class=&quot;z-constant z-language z-boolean z-erlang&quot;&gt;true&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;filter&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Pred&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;        &lt;span class=&quot;z-constant z-language z-boolean z-erlang&quot;&gt;false&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;filter&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Pred&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-conditional z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;return-the-sum-of-the-values-in-the-list-2&quot;&gt;Return the sum of the values in the list&lt;a class=&quot;zola-anchor&quot; href=&quot;#return-the-sum-of-the-values-in-the-list-2&quot; aria-label=&quot;Anchor link for: return-the-sum-of-the-values-in-the-list-2&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;Note that in this case, we have to provide a &quot;starting&quot; value upon which to fold for this to work.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;sum_values&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;fold&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-erlang&quot;&gt;fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;X&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;SumSoFar&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;X&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-erlang&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;SumSoFar&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-declaration z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;fold&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-language z-anonymous z-erlang&quot;&gt;_&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Accumulated&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Accumulated&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;fold&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Accumulated&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;fold&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Accumulated&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;making-them-tail-recursive&quot;&gt;Making them tail recursive&lt;a class=&quot;zola-anchor&quot; href=&quot;#making-them-tail-recursive&quot; aria-label=&quot;Anchor link for: making-them-tail-recursive&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;p&gt;For most of these implementations, we run into the scaling problem of recursive approaches: since the frames of the previous recursive calls have to be preserved, memory usage scales linearly with the size of the given list. Languages like Erlang solve for this with &lt;a href=&quot;https:&#x2F;&#x2F;beta.erlang.org&#x2F;doc&#x2F;system&#x2F;ref_man_functions.html#tail-recursion&quot;&gt;Tail Call Optimization&lt;&#x2F;a&gt;. As such, we can avoid the inefficiency as long as we make these implementations tail recursive:&lt;&#x2F;p&gt;
&lt;h4 id=&quot;map&quot;&gt;Map&lt;a class=&quot;zola-anchor&quot; href=&quot;#map&quot; aria-label=&quot;Anchor link for: map&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-comment z-line z-percentage z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-percentage z-erlang&quot;&gt;%&lt;&#x2F;span&gt; Start with a 2-arity function which performs the list reverse, and provides a default starting value for the accumulator
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;map_tco&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;map_tco&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-namespace z-erlang&quot;&gt;lists&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-double-colon z-erlang&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;reverse&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-comment z-line z-percentage z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-percentage z-erlang&quot;&gt;%&lt;&#x2F;span&gt; Use the 3-arity function with the accumulator for TCO
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;map_tco&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-language z-anonymous z-erlang&quot;&gt;_&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Acc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Acc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;map_tco&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Acc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;map_tco&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Acc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;filter&quot;&gt;Filter&lt;a class=&quot;zola-anchor&quot; href=&quot;#filter&quot; aria-label=&quot;Anchor link for: filter&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-comment z-line z-percentage z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-percentage z-erlang&quot;&gt;%&lt;&#x2F;span&gt; Again, a 2-arity proxy for convenience
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;filter_tco&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Pred&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;filter_tco&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-namespace z-erlang&quot;&gt;lists&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-double-colon z-erlang&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;reverse&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Pred&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;filter_tco&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-language z-anonymous z-erlang&quot;&gt;_&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Acc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Acc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;filter_tco&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Pred&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Acc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;    &lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-case z-erlang&quot;&gt;case&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Pred&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-flow z-erlang&quot;&gt;of&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;        &lt;span class=&quot;z-constant z-language z-boolean z-erlang&quot;&gt;true&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;filter_tco&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Pred&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Acc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;        &lt;span class=&quot;z-constant z-language z-boolean z-erlang&quot;&gt;false&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;filter_tco&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Pred&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Acc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-conditional z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;fold&quot;&gt;Fold&lt;a class=&quot;zola-anchor&quot; href=&quot;#fold&quot; aria-label=&quot;Anchor link for: fold&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;Notice that fold is already tail recursive! The last call in &lt;code&gt;fold&lt;&#x2F;code&gt; is of a call to &lt;code&gt;fold&lt;&#x2F;code&gt;, so it already enjoys tail call optimization. We can rename it to &lt;code&gt;fold_tco&lt;&#x2F;code&gt;, to match our other functions, but the syntax doesn&#x27;t change at all.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;fold_tco&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-language z-anonymous z-erlang&quot;&gt;_&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Accumulated&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Accumulated&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;fold_tco&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Accumulated&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;fold_tco&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Accumulated&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;wait-don-t-these-all-look-similar&quot;&gt;Wait - don&#x27;t these all look similar?&lt;a class=&quot;zola-anchor&quot; href=&quot;#wait-don-t-these-all-look-similar&quot; aria-label=&quot;Anchor link for: wait-don-t-these-all-look-similar&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;p&gt;Notice that all of these tail-recursive functions follow the same form:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;They are a function of the form &lt;code&gt;function_name(List, Function, Accumulator)&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;In the recursive calls they make to themselves, they set the accumulator by composing the function, the head of the list, and the accumulator.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The last bit is important to see how we can refactor further.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;In tail-recursive map: &lt;code&gt;map_tco(Tail, Fun, [Fun(Head)|Acc])&lt;&#x2F;code&gt; uses the expression &lt;code&gt;[Fun(Head)|Acc]&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;In tail-recursive filter: &lt;code&gt;filter_tco(Tail ,Pred, [Head|Acc])&lt;&#x2F;code&gt; uses the expression &lt;code&gt;[Head|Acc]&lt;&#x2F;code&gt; (and just &lt;code&gt;Acc&lt;&#x2F;code&gt; in the other tree case)&lt;&#x2F;li&gt;
&lt;li&gt;In fold: &lt;code&gt;fold_tco(Fun, Tail, Fun(Head, Accumulated))&lt;&#x2F;code&gt; uses the expression &lt;code&gt;Fun(Head, Accumulated)&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Recall that &lt;code&gt;fold&lt;&#x2F;code&gt; as we originally wrote it was already tail-recursive. And in fact, if we look at the pattern we&#x27;ve identified, we can see that &lt;code&gt;fold&lt;&#x2F;code&gt; is in fact &lt;em&gt;more abstract&lt;&#x2F;em&gt; than &lt;code&gt;map&lt;&#x2F;code&gt; and &lt;code&gt;filter&lt;&#x2F;code&gt;. In other words, &lt;code&gt;map&lt;&#x2F;code&gt; and &lt;code&gt;filter&lt;&#x2F;code&gt; can be written to use &lt;code&gt;fold&lt;&#x2F;code&gt;! Let&#x27;s try:&lt;&#x2F;p&gt;
&lt;p&gt;First &lt;code&gt;map&lt;&#x2F;code&gt;. Notice that we must reverse the list up front so that elements get ordered correctly after the fold. This can be done as a post-processing operation as well.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;map&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;fold&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-namespace z-erlang&quot;&gt;lists&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-double-colon z-erlang&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;reverse&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-erlang&quot;&gt;fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Acc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Acc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-declaration z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;filter&lt;&#x2F;code&gt; can be written this way too:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;filter&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;fold&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-namespace z-erlang&quot;&gt;lists&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-double-colon z-erlang&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;reverse&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;         &lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-erlang&quot;&gt;fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Acc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;            &lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-case z-erlang&quot;&gt;case&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-flow z-erlang&quot;&gt;of&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;                &lt;span class=&quot;z-constant z-language z-boolean z-erlang&quot;&gt;true&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Acc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;                &lt;span class=&quot;z-variable z-language z-anonymous z-erlang&quot;&gt;_&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Acc&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;            &lt;span class=&quot;z-keyword z-control z-conditional z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;         &lt;span class=&quot;z-keyword z-declaration z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;         &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;folds-and-for-loops&quot;&gt;Folds and &lt;code&gt;for&lt;&#x2F;code&gt; loops&lt;a class=&quot;zola-anchor&quot; href=&quot;#folds-and-for-loops&quot; aria-label=&quot;Anchor link for: folds-and-for-loops&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;code&gt;map&lt;&#x2F;code&gt; and &lt;code&gt;filter&lt;&#x2F;code&gt; can be written in terms of &lt;code&gt;fold&lt;&#x2F;code&gt; because, conceptually, &lt;code&gt;fold&lt;&#x2F;code&gt; is doing the same work as a &lt;code&gt;for&lt;&#x2F;code&gt; loop: we start with a list, we have a &quot;current&quot; element in the list (we refer to it as &lt;code&gt;Head&lt;&#x2F;code&gt; since we are pattern matching against the front of the list), and we operate on we&#x27;ve collected so far from our previous steps through the loop, in composition with the current element. We can write a sort of &lt;code&gt;fold&lt;&#x2F;code&gt; as a for loop using the same variable names in &lt;code&gt;java&lt;&#x2F;code&gt; to demonstrate:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; class=&quot;language-java z-code&quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-class z-java&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-java&quot;&gt;public&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-class z-identifier z-java&quot;&gt;&lt;span class=&quot;z-storage z-type z-java&quot;&gt;interface&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-class z-java&quot;&gt;Accumulator&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic z-declaration z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-type z-java&quot;&gt;T&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-java&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-type z-java&quot;&gt;E&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-class z-body z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-class z-java&quot;&gt;&lt;span class=&quot;z-meta z-class z-body z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-support z-class z-java&quot;&gt;E&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-method z-java&quot;&gt;&lt;span class=&quot;z-meta z-method z-identifier z-java&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-java&quot;&gt;accumulate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-method z-parameters z-java&quot;&gt;&lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;T&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-java&quot;&gt;first&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-java&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-class z-java&quot;&gt;E&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-java&quot;&gt;second&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-class z-java&quot;&gt;&lt;span class=&quot;z-meta z-class z-body z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-java&quot;&gt;public&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-modifier z-java&quot;&gt;static&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;T&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-java&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;E&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-class z-java&quot;&gt;E&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-java&quot;&gt;&lt;span class=&quot;z-variable z-function z-java&quot;&gt;fold&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;T&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; list&lt;span class=&quot;z-punctuation z-separator z-comma z-java&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-class z-java&quot;&gt;E&lt;&#x2F;span&gt; initialAccumulated&lt;span class=&quot;z-punctuation z-separator z-comma z-java&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-class z-java&quot;&gt;Accumulator&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;T&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-java&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-class z-java&quot;&gt;E&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; accumulator&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-storage z-type z-var z-java&quot;&gt;var&lt;&#x2F;span&gt; accumulated &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; initialAccumulated&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-loop z-for z-java&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-class z-java&quot;&gt;T&lt;&#x2F;span&gt; head &lt;span class=&quot;z-keyword z-operator z-ternary z-java&quot;&gt;:&lt;&#x2F;span&gt; list&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        accumulated &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; accumulator&lt;span class=&quot;z-punctuation z-accessor z-dot z-java&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-java&quot;&gt;&lt;span class=&quot;z-variable z-function z-java&quot;&gt;accumulate&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;head&lt;span class=&quot;z-punctuation z-separator z-comma z-java&quot;&gt;,&lt;&#x2F;span&gt; accumulated&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-return z-java&quot;&gt;return&lt;&#x2F;span&gt; accumulated&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;By that same token, we can use the language of &lt;code&gt;fold&lt;&#x2F;code&gt; to define a &lt;code&gt;for&lt;&#x2F;code&gt; loop, but in Erlang!&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;for&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-language z-anonymous z-erlang&quot;&gt;_&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;ReturnValue&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;ReturnValue&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;for&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;AccumulatedValue&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;for&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Head&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;AccumulatedValue&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Because all of our use-cases are variants on a &lt;code&gt;for&lt;&#x2F;code&gt; loop in a procedural context, they can all be similarly solved with &lt;code&gt;fold&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;add-one&quot;&gt;Add One&lt;a class=&quot;zola-anchor&quot; href=&quot;#add-one&quot; aria-label=&quot;Anchor link for: add-one&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;add_one&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;fold&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-namespace z-erlang&quot;&gt;lists&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-double-colon z-erlang&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;reverse&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-erlang&quot;&gt;fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;X&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Ls&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;X&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-erlang&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Ls&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-declaration z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-comment z-line z-percentage z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-percentage z-erlang&quot;&gt;%&lt;&#x2F;span&gt; Or, if you&amp;#39;d rather append the value (less efficient in erlang, but readable), you can avoid the list reverse:
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;add_one&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;fold&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-erlang&quot;&gt;fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;X&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Ls&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Ls&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-lists z-erlang&quot;&gt;++&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;X&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-erlang&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-declaration z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;get-evens&quot;&gt;Get Evens&lt;a class=&quot;zola-anchor&quot; href=&quot;#get-evens&quot; aria-label=&quot;Anchor link for: get-evens&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-comment z-line z-percentage z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-percentage z-erlang&quot;&gt;%&lt;&#x2F;span&gt; again, swap append for reverse if you&amp;#39;d prefer here
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;get_evens&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;fold&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;        &lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-namespace z-erlang&quot;&gt;lists&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-double-colon z-erlang&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;reverse&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;        &lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-erlang&quot;&gt;fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;X&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Ls&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-if z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-erlang&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;X&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-erlang&quot;&gt;rem&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;2&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-erlang&quot;&gt;=:=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;0&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;X&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;|&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Ls&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-boolean z-erlang&quot;&gt;true&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Ls&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-conditional z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-declaration z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;        &lt;span class=&quot;z-meta z-sequence z-list z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;With this longer syntax, it even starts to look a little bit like a &lt;code&gt;for&lt;&#x2F;code&gt; loop - just replace the word &lt;code&gt;fold&lt;&#x2F;code&gt; with &lt;code&gt;for&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;sum&quot;&gt;Sum&lt;a class=&quot;zola-anchor&quot; href=&quot;#sum&quot; aria-label=&quot;Anchor link for: sum&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;p&gt;Since we&#x27;re returning a single value in this case, we can avoid calling &lt;code&gt;lists:reverse&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;sum_values&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;fold&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-erlang&quot;&gt;fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;X&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;SumSoFar&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;X&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-erlang&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;SumSoFar&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-declaration z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;some-other-use-cases&quot;&gt;Some other use-cases&lt;a class=&quot;zola-anchor&quot; href=&quot;#some-other-use-cases&quot; aria-label=&quot;Anchor link for: some-other-use-cases&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Find element in a list&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;find_value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Value&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;fold&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;    &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;    &lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-erlang&quot;&gt;fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;X&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Else&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;        &lt;span class=&quot;z-meta z-if z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-erlang&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;X&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-erlang&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Value&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Value&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-if z-erlang&quot;&gt;        &lt;span class=&quot;z-constant z-language z-boolean z-erlang&quot;&gt;true&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Else&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-if z-erlang&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-conditional z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;    &lt;span class=&quot;z-keyword z-declaration z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;    &lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-constant z-other z-symbol z-erlang&quot;&gt;notfound&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Index of an element in a list&lt;&#x2F;p&gt;
&lt;p&gt;In cases like this, the accumulator doesn&#x27;t really need to contain much information about the list at all. In this case, it&#x27;s just a) the index to check next, and b) whether the element has been found.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;erlang&quot; class=&quot;language-erlang z-code&quot;&gt;&lt;code class=&quot;language-erlang&quot; data-lang=&quot;erlang&quot;&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-erlang&quot;&gt;index_of&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;Value&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;    &lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-case z-erlang&quot;&gt;case&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-function z-erlang&quot;&gt;fold&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;        &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;List&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;        &lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-erlang&quot;&gt;fun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-erlang&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-parameters z-erlang&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;CurrentValue&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-tuple z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;FoundIndex&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-erlang&quot;&gt;IsFound&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;            &lt;span class=&quot;z-meta z-if z-erlang&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-erlang&quot;&gt;if&lt;&#x2F;span&gt;  &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;IsFound&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-erlang&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-constant z-other z-symbol z-erlang&quot;&gt;found&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-tuple z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;FoundIndex&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-constant z-other z-symbol z-erlang&quot;&gt;found&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-if z-erlang&quot;&gt;                &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;CurrentValue&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-erlang&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Value&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-tuple z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;FoundIndex&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-erlang&quot;&gt;+&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-constant z-other z-symbol z-erlang&quot;&gt;found&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-if z-erlang&quot;&gt;                &lt;span class=&quot;z-constant z-language z-boolean z-erlang&quot;&gt;true&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-tuple z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;FoundIndex&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-erlang&quot;&gt;+&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-constant z-other z-symbol z-erlang&quot;&gt;notfound&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-if z-erlang&quot;&gt;            &lt;span class=&quot;z-keyword z-control z-conditional z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-fun z-erlang&quot;&gt;        &lt;span class=&quot;z-keyword z-declaration z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-erlang&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;        &lt;span class=&quot;z-meta z-sequence z-tuple z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-erlang&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-erlang&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-constant z-other z-symbol z-erlang&quot;&gt;notfound&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-erlang&quot;&gt;    &lt;span class=&quot;z-punctuation z-section z-arguments z-end z-erlang&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-flow z-erlang&quot;&gt;of&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;        &lt;span class=&quot;z-meta z-sequence z-tuple z-erlang&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-erlang&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Index&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-erlang&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-constant z-other z-symbol z-erlang&quot;&gt;found&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-erlang&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-erlang&quot;&gt;Index&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-clauses z-erlang&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;        &lt;span class=&quot;z-variable z-language z-anonymous z-erlang&quot;&gt;_&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-clause-head-body z-erlang&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-atom z-erlang&quot;&gt;&lt;span class=&quot;z-constant z-other z-symbol z-erlang&quot;&gt;notfound&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-function z-name z-erlang&quot;&gt;&lt;span class=&quot;z-meta z-case z-erlang&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-conditional z-end z-erlang&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-clause z-erlang&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h1 id=&quot;wrapping-up&quot;&gt;Wrapping up&lt;a class=&quot;zola-anchor&quot; href=&quot;#wrapping-up&quot; aria-label=&quot;Anchor link for: wrapping-up&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;p&gt;Whether in a functional or a procedural paradigm, programmers frequently need to operate on lists of objects. It turns out, whether you&#x27;re using an iterative loop (procedural paradigm) or a tail-recursive function (functional paradigm), you conceptually have to do the same work: &quot;seek&quot; through the list, and operate on the current element in composition with however you&#x27;ve accumlated values in the previous iterations (starting, of course, with a seed element). Whether you call it a &lt;code&gt;for&lt;&#x2F;code&gt; loop or a &lt;code&gt;fold&lt;&#x2F;code&gt;, it&#x27;s a remarkably similar operation.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
