<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nathan Branco Caracho</title>
    <description>The latest articles on DEV Community by Nathan Branco Caracho (@nathancaracho).</description>
    <link>https://dev.to/nathancaracho</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F287354%2Fa90b60e5-a52e-44d7-844d-98cb6d70af13.jpeg</url>
      <title>DEV Community: Nathan Branco Caracho</title>
      <link>https://dev.to/nathancaracho</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nathancaracho"/>
    <language>en</language>
    <item>
      <title>MCIPFE - Cálculo Lambda</title>
      <dc:creator>Nathan Branco Caracho</dc:creator>
      <pubDate>Tue, 17 May 2022 03:05:52 +0000</pubDate>
      <link>https://dev.to/nathancaracho/mcipfe-calculo-lambda-3ma</link>
      <guid>https://dev.to/nathancaracho/mcipfe-calculo-lambda-3ma</guid>
      <description>&lt;h1&gt;
  
  
  Saga MCIPFE
&lt;/h1&gt;

&lt;p&gt;O &lt;strong&gt;M&lt;/strong&gt;anual &lt;strong&gt;C&lt;/strong&gt;ompletamente &lt;strong&gt;I&lt;/strong&gt;ncompleto de &lt;strong&gt;P&lt;/strong&gt;rogramação &lt;strong&gt;F&lt;/strong&gt;uncional com &lt;strong&gt;E&lt;/strong&gt;lixir é uma série de postagens bem pequenas para explicar um pouco de programação funcional.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cálculo lambda
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;"No início eram apenas funções"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;O cálculo lambda é a abstração de um sistema formal da matemática lógica baseado na substituição e mapeamento de valores, sendo a base do conceito de &lt;strong&gt;funções puras&lt;/strong&gt; que temos hoje.&lt;/p&gt;

&lt;p&gt;Usando símbolo λ (lambda), seguido do nome do parâmetro e por fim a expressão.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Uma soma:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;λx.  x+1(λx.  x+1)22+1=3
\lambda x.\;x + 1 \newline
(\lambda x.\;x + 1)2 \newline
2+1 =3
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;λ&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="mord"&gt;.&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace newline"&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;λ&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="mord"&gt;.&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace newline"&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="n"&gt;add_one&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="n"&gt;add_one&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;#3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;No caso acima temos uma função simples que recebe um valor como parâmetro (&lt;strong&gt;x&lt;/strong&gt;) e retorna a soma do parâmetro mais (&lt;strong&gt;+&lt;/strong&gt;) 1, ou seja, substitui (&lt;strong&gt;x&lt;/strong&gt;) por um valor e mapeia para expressão de (&lt;strong&gt;+1&lt;/strong&gt;).&lt;/p&gt;
&lt;h3&gt;
  
  
  O poder de uma função
&lt;/h3&gt;

&lt;p&gt;Com o conceito simples de mapeamento e substituição é possível construir qualquer coisa inclusive a lógica booleana.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lógica booleana de forma extremamente resumida é ideia que no universo só existem dois estados &lt;strong&gt;Verdadeiro&lt;/strong&gt; ou &lt;strong&gt;Falso&lt;/strong&gt;, contendo operadores como &lt;strong&gt;E&lt;/strong&gt;, &lt;strong&gt;OU&lt;/strong&gt; e &lt;strong&gt;NÃO&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vamos criar a lógica de &lt;strong&gt;Verdadeiro&lt;/strong&gt; , &lt;strong&gt;Falso&lt;/strong&gt; e o operador &lt;strong&gt;Negação&lt;/strong&gt;.&lt;br&gt;
O conceito de &lt;strong&gt;Negação&lt;/strong&gt; é basicamente a inversão do valor booleano, dessa forma &lt;strong&gt;NÃO&lt;/strong&gt; &lt;strong&gt;Falso&lt;/strong&gt; é igual à &lt;strong&gt;Verdadeiro&lt;/strong&gt;.&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;true=λx.λy.  xfalse=λx.λy.  y(λb.  b  false  true)true(true  false  true)=false(λb.  b  false  true)false(false  false  true)=true
true = \lambda x.\lambda y. \;x \newline
false = \lambda x.\lambda y. \;y \newline 
(\lambda b. \;b \;false \;true) true \newline
(true\;false\;true) = false \newline
(\lambda b.\; b \;false\; true) false \newline
(false\;false\;true) = true
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord mathnormal"&gt;r&lt;/span&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="mord mathnormal"&gt;e&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;λ&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="mord"&gt;.&lt;/span&gt;&lt;span class="mord mathnormal"&gt;λ&lt;/span&gt;&lt;span class="mord mathnormal"&gt;y&lt;/span&gt;&lt;span class="mord"&gt;.&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace newline"&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;f&lt;/span&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="mord mathnormal"&gt;l&lt;/span&gt;&lt;span class="mord mathnormal"&gt;se&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;λ&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="mord"&gt;.&lt;/span&gt;&lt;span class="mord mathnormal"&gt;λ&lt;/span&gt;&lt;span class="mord mathnormal"&gt;y&lt;/span&gt;&lt;span class="mord"&gt;.&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;y&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace newline"&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;λb&lt;/span&gt;&lt;span class="mord"&gt;.&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;b&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;f&lt;/span&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="mord mathnormal"&gt;l&lt;/span&gt;&lt;span class="mord mathnormal"&gt;se&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord mathnormal"&gt;r&lt;/span&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="mord mathnormal"&gt;e&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord mathnormal"&gt;r&lt;/span&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="mord mathnormal"&gt;e&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace newline"&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord mathnormal"&gt;r&lt;/span&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="mord mathnormal"&gt;e&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;f&lt;/span&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="mord mathnormal"&gt;l&lt;/span&gt;&lt;span class="mord mathnormal"&gt;se&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord mathnormal"&gt;r&lt;/span&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="mord mathnormal"&gt;e&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;f&lt;/span&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="mord mathnormal"&gt;l&lt;/span&gt;&lt;span class="mord mathnormal"&gt;se&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace newline"&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;λb&lt;/span&gt;&lt;span class="mord"&gt;.&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;b&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;f&lt;/span&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="mord mathnormal"&gt;l&lt;/span&gt;&lt;span class="mord mathnormal"&gt;se&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord mathnormal"&gt;r&lt;/span&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="mord mathnormal"&gt;e&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mord mathnormal"&gt;f&lt;/span&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="mord mathnormal"&gt;l&lt;/span&gt;&lt;span class="mord mathnormal"&gt;se&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace newline"&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;f&lt;/span&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="mord mathnormal"&gt;l&lt;/span&gt;&lt;span class="mord mathnormal"&gt;se&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;f&lt;/span&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="mord mathnormal"&gt;l&lt;/span&gt;&lt;span class="mord mathnormal"&gt;se&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord mathnormal"&gt;r&lt;/span&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="mord mathnormal"&gt;e&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord mathnormal"&gt;r&lt;/span&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="mord mathnormal"&gt;e&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="n"&gt;lambda_true&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; 
&lt;span class="n"&gt;lambda_false&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; 

&lt;span class="n"&gt;lambda_not&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; 
   &lt;span class="n"&gt;bool&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lambda_false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;lambda_true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;print&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; 
    &lt;span class="no"&gt;IO&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;puts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bool&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"false"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lambda_not&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lambda_true&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;#false&lt;/span&gt;
&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lambda_not&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lambda_false&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;#true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Já no exemplo acima criamos duas funções &lt;code&gt;true&lt;/code&gt; e &lt;code&gt;false&lt;/code&gt; que recebem dois parâmetros &lt;code&gt;x&lt;/code&gt; e &lt;code&gt;y&lt;/code&gt; , a função  &lt;code&gt;true&lt;/code&gt; retorna somente o parâmetro &lt;code&gt;x&lt;/code&gt; e a função &lt;code&gt;false&lt;/code&gt; retorna somente o parâmetro &lt;code&gt;y&lt;/code&gt; .&lt;br&gt;
Para  a &lt;code&gt;negação&lt;/code&gt; precisamos criar uma outra função que mapeie uma função booleana, &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt;, em outra função booleana invertida.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Mas qual a &lt;strong&gt;função&lt;/strong&gt; do cálculo lambda no dia à dia? O cálculo lambda é a base do que conhecemos hoje como uma função, entender esse conceito, mesmo que de forma mais superficial, é a porta de entrada para entender outros conceitos de programação funcional. &lt;/p&gt;

&lt;h3&gt;
  
  
  Bibliográfia
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.inf.pucrs.br/emoreno/undergraduate/EC/cirdig/class_files/Aula02.pdf"&gt;ÁLGEBRA BOOLEANA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Lambda_calculus"&gt;Lambda calculus wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=eis11j_iGMs"&gt;Lambda Calculus - Computerphile&lt;/a&gt; Assistam é incrível&lt;/li&gt;
&lt;li&gt;&lt;a href="http://learnyouahaskell.com/chapters"&gt;Learn You a Haskell for Great Good!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>elixir</category>
      <category>funcional</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Lambda Saga - Currying</title>
      <dc:creator>Nathan Branco Caracho</dc:creator>
      <pubDate>Mon, 23 Nov 2020 19:43:03 +0000</pubDate>
      <link>https://dev.to/nathancaracho/lambda-saga-currying-487h</link>
      <guid>https://dev.to/nathancaracho/lambda-saga-currying-487h</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;If you need share a specific behaviour with functional programming, Currying is the answer. Created by &lt;a href="https://pt.wikipedia.org/wiki/Haskell_Curry"&gt;Haskell Curry&lt;/a&gt; currying basically is a technique to transform a multiple arguments or &lt;a href="https://en.wikipedia.org/wiki/Tuple"&gt;n-tuple&lt;/a&gt; argument function in a chain of single arguments functions. &lt;br&gt;
&lt;code&gt;f:( x ∗ y ) → z to ( f ):x → ( y → z )&lt;/code&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  Function signature
&lt;/h2&gt;

&lt;p&gt;Let understanding what is &lt;code&gt;→&lt;/code&gt; , &lt;code&gt;( x ∗ y )&lt;/code&gt;, &lt;strong&gt;Domain&lt;/strong&gt; and &lt;strong&gt;Range&lt;/strong&gt;. The tuple or &lt;code&gt;( x ∗ y )&lt;/code&gt; is a product of two types or a composing between two types, arrow function or &lt;code&gt;→&lt;/code&gt; is used to indicate a map of a set into another set, in other words indicate the argument and return, &lt;strong&gt;Domain&lt;/strong&gt; is the argument of a function and &lt;strong&gt;Range&lt;/strong&gt; is a result of a function.&lt;br&gt;&lt;br&gt;
Look below the example:  &lt;/p&gt;

&lt;p&gt;&lt;code&gt;f: x → y&lt;/code&gt;  &lt;/p&gt;

&lt;p&gt;The function above has  &lt;code&gt;x&lt;/code&gt;  as &lt;strong&gt;Domain&lt;/strong&gt; and &lt;code&gt;y&lt;/code&gt;  as &lt;strong&gt;Range&lt;/strong&gt; and that is read as &lt;strong&gt;from&lt;/strong&gt;  &lt;code&gt;x&lt;/code&gt; &lt;strong&gt;to&lt;/strong&gt;  &lt;code&gt;y&lt;/code&gt; , so the function &lt;code&gt;f&lt;/code&gt;  has  &lt;code&gt;x&lt;/code&gt; as argument and  &lt;code&gt;y&lt;/code&gt;  as result. Now look another example with a tuple as &lt;strong&gt;Domain&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;f: ( x ∗ y ) → z&lt;/code&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Symbol/Name&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Means&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;→&lt;/td&gt;
&lt;td&gt;returns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain&lt;/td&gt;
&lt;td&gt;argument type&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Range&lt;/td&gt;
&lt;td&gt;result type&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;( x ∗ y )&lt;/td&gt;
&lt;td&gt;Tuple&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Look the same examples with F#:  &lt;/p&gt;

&lt;p&gt;&lt;code&gt;multiply: int  →  int&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;multiply&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;span class="n"&gt;multiply&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;multiply: ( int ∗ int )  →  int&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nf"&gt;multiply&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;span class="nf"&gt;multiply&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Explaining Currying
&lt;/h2&gt;

&lt;p&gt;The ideia is share the sum behavior, so we will create two functions. First the &lt;code&gt;sum&lt;/code&gt; function, that function will receive two int type, &lt;code&gt;first&lt;/code&gt; and &lt;code&gt;second&lt;/code&gt;, as arguments and return a int type value, &lt;code&gt;first&lt;/code&gt; + &lt;code&gt;second&lt;/code&gt;. Last we will create &lt;code&gt;addOne&lt;/code&gt; function, that function will receive just one int argument called&lt;code&gt;second&lt;/code&gt; and add 1 to this argument. That way we will share the &lt;code&gt;sum&lt;/code&gt; behavior to &lt;code&gt;addOne&lt;/code&gt; function. &lt;/p&gt;

&lt;h4&gt;
  
  
  Regular sum function
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;sum: ( int ∗ int )  →  int&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;addOne&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;addOne&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;    
&lt;span class="p"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;printf&lt;/span&gt; &lt;span class="s"&gt;"regular function result: %d"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is a regular function with a tuple as argument and it only can applied with both values. &lt;/p&gt;

&lt;h4&gt;
  
  
  Curried sum function
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;sum: int  →  int  →  int or sum: int  →  (int  →  int)&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="c1"&gt;//main function&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;subFunction&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
    &lt;span class="n"&gt;subFunction&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;addOne&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;// int -&amp;gt; int&lt;/span&gt;

&lt;span class="n"&gt;addOne&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
&lt;span class="p"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;printf&lt;/span&gt; &lt;span class="s"&gt;"curried sum result: %d"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What we did
&lt;/h3&gt;

&lt;p&gt;We created two functions, the main function, &lt;code&gt;int  →  (int  →  int)&lt;/code&gt; , has one int type argument called &lt;code&gt;first&lt;/code&gt; and return  sub-function, that function, &lt;code&gt;int  →  int&lt;/code&gt; , has one int type argument called &lt;code&gt;second&lt;/code&gt; and in your body has the arguments sum.  &lt;/p&gt;

&lt;h3&gt;
  
  
  How this works
&lt;/h3&gt;

&lt;p&gt;The &lt;em&gt;main function&lt;/em&gt; receive a value as parameter and "&lt;strong&gt;hold it&lt;/strong&gt;" in your inner scope, this &lt;em&gt;main function&lt;/em&gt; return a single parameter &lt;em&gt;sub-function&lt;/em&gt; and that &lt;em&gt;sub-function&lt;/em&gt; sum &lt;em&gt;main function&lt;/em&gt; parameter with your own parameter. That is only possible because the &lt;em&gt;sub-function&lt;/em&gt; is inside &lt;em&gt;main function&lt;/em&gt; inner scope, that way it can access all &lt;em&gt;main function&lt;/em&gt; variables, that is called &lt;a href="https://en.wikipedia.org/wiki/Closure_(computer_programming)"&gt;closure&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
Basically when you create a function all your environment is stored too, it works look like a &lt;a href="https://en.wikipedia.org/wiki/Scope_(computer_science)#Lexical_scope_vs._dynamic_scope"&gt;lexical/static scope&lt;/a&gt; if scope is a part of code &lt;a href="https://en.wikipedia.org/wiki/Scope_(computer_science)#Lexical_scope_vs._dynamic_scope"&gt;lexical/static scope&lt;/a&gt; is a free or bounded variable scope access range. See an example below:&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;lexicalExample&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="c1"&gt;// &amp;lt;- lexical scope start &lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;multiply&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="c1"&gt;// &amp;lt;- lexical scope end&lt;/span&gt;
    &lt;span class="n"&gt;multiply&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
&lt;span class="n"&gt;lexicalExample&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The example above when variable &lt;code&gt;a&lt;/code&gt; is created a &lt;a href="https://en.wikipedia.org/wiki/Scope_(computer_science)#Lexical_scope_vs._dynamic_scope"&gt;lexical/static scope&lt;/a&gt; is created too and the function &lt;code&gt;multiply&lt;/code&gt; is created inside that &lt;a href="https://en.wikipedia.org/wiki/Scope_(computer_science)#Lexical_scope_vs._dynamic_scope"&gt;lexical/static scope&lt;/a&gt;, that way the &lt;code&gt;multiply&lt;/code&gt; function can use the &lt;code&gt;a&lt;/code&gt; value. When &lt;code&gt;a&lt;/code&gt; variable is recreated another &lt;a href="https://en.wikipedia.org/wiki/Scope_(computer_science)#Lexical_scope_vs._dynamic_scope"&gt;lexical/static scope&lt;/a&gt; is create but this not change the &lt;code&gt;a&lt;/code&gt;  value used by &lt;code&gt;multiply&lt;/code&gt; function because this function was created inside last &lt;a href="https://en.wikipedia.org/wiki/Scope_(computer_science)#Lexical_scope_vs._dynamic_scope"&gt;lexical/static scope&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fuslucutdx2qozfvehu1k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fuslucutdx2qozfvehu1k.png" alt="Screenshot_20201110_003729" width="492" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now when we talk about &lt;a href="https://en.wikipedia.org/wiki/Closure_(computer_programming)"&gt;lexical closure&lt;/a&gt; the concept is the same, but with one difference the scope is created when the function is created, so the all function arguments is accessible for anything inside function scope.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fqlx87dsel8cjw5k9puel.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fqlx87dsel8cjw5k9puel.png" alt="Screenshot_20201110_003919" width="760" height="224"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Currying on FSharp
&lt;/h3&gt;

&lt;p&gt;Use currying with &lt;strong&gt;FSharp&lt;/strong&gt; is easy because all multi arguments functions is curried by default, so not is necessary create it manually. Look it below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;addOne&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;// int -&amp;gt; int&lt;/span&gt;

&lt;span class="n"&gt;addOne&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
&lt;span class="p"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;printf&lt;/span&gt; &lt;span class="s"&gt;"implicit curried sum result: %d"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result is the same than first function and we can simplify this further. Look it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;addOne&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(+)&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;// int -&amp;gt; int&lt;/span&gt;

&lt;span class="n"&gt;addOne&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
&lt;span class="p"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;printf&lt;/span&gt; &lt;span class="s"&gt;"simplify curried sum result: %d"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The sum operator is a &lt;a href="https://en.wikipedia.org/wiki/Infix_notation"&gt;infix notation&lt;/a&gt; and a multi argument too so is by default curried.&lt;br&gt;&lt;br&gt;
&lt;code&gt;(+): int  →  int  →  int&lt;/code&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  The use of currying
&lt;/h2&gt;

&lt;p&gt;With currying we are able to partial apply a function, in others words we fix the first of N arguments of a function and reuse the resulted function. That technique possibility us to share a behavior without create a new function and with lightweight syntax. A good examples of curried function is &lt;code&gt;Seq.reduce&lt;/code&gt; and &lt;code&gt;|&amp;gt;&lt;/code&gt;, look it below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Seq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt; &lt;span class="p"&gt;(+)&lt;/span&gt;
&lt;span class="p"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;printf&lt;/span&gt; &lt;span class="s"&gt;"sum of all list itens: %d"&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Explaining the expression
&lt;/h3&gt;

&lt;p&gt;First we need understanding what is the operator &lt;code&gt;|&amp;gt;&lt;/code&gt; or &lt;a href="https://docs.microsoft.com/pt-br/dotnet/fsharp/language-reference/symbol-and-operator-reference/"&gt;forward pipe operator&lt;/a&gt;. Basically the &lt;a href="https://docs.microsoft.com/pt-br/dotnet/fsharp/language-reference/symbol-and-operator-reference/"&gt;forward pipe operator&lt;/a&gt; is a &lt;a href="https://en.wikipedia.org/wiki/Infix_notation"&gt;infix notation&lt;/a&gt; where the operator apply left value to right function.&lt;br&gt;&lt;br&gt;
 &lt;code&gt;f: a  →  (a  →  b)  →  b&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="p"&gt;(|&amp;gt;)&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;Seq.reduce&lt;/code&gt; function have two arguments, &lt;code&gt;first  (int  →  int  →  int)&lt;/code&gt;  and last a &lt;code&gt;seq\&amp;lt;int\&amp;gt;&lt;/code&gt; . If you are a good observer can see the signature  &lt;code&gt;int  →  int  →  int&lt;/code&gt;  is the same signature than &lt;code&gt;(+)&lt;/code&gt; operator, so we partial apply &lt;code&gt;(+)&lt;/code&gt; operator to &lt;code&gt;Seq.reduce&lt;/code&gt; and after apply &lt;code&gt;[1;2;3;4]&lt;/code&gt; to &lt;code&gt;Seq.reduce (+)&lt;/code&gt;.  &lt;/p&gt;

&lt;p&gt;The same expression can be write with a different way look it below:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;sumAll&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Seq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt; &lt;span class="p"&gt;(+)&lt;/span&gt; &lt;span class="c1"&gt;// seq&amp;lt;int&amp;gt; -&amp;gt; int&lt;/span&gt;

&lt;span class="n"&gt;sumAll&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;printf&lt;/span&gt; &lt;span class="s"&gt;"sum of all of integer list : %d"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the same of last expression but  creating a new function  sumAll: &lt;code&gt;seq&amp;lt;int&amp;gt;  →  int&lt;/code&gt;  partially applying &lt;code&gt;(+)&lt;/code&gt; to &lt;code&gt;Seq.reduce&lt;/code&gt;. That way we can share the behavior of sum all itens of a list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The currying is a great technique to share behavior, basically transform a &lt;a href="https://en.wikipedia.org/wiki/Tuple"&gt;n-tuple&lt;/a&gt; argument function to a chain of functions with one argument using lexical closure. Use currying in Fsharp is easy because all multi arguments is curried by default.&lt;/p&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pt.wikipedia.org/wiki/Currying"&gt;Currying wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codefugue.com/partial-application-vs-currying/"&gt;Partial application vs. Curriyng&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/better-programming/functional-programming-currying-vs-partial-application-53b8b05c73e3#:~:text=Currying%3A%20A%20function%20returning%20another,function%20can%20take%20several%20parameters."&gt;Funtional Programming: Currying vs. Partial application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/dotnet/fsharp/introduction-to-functional-programming/first-class-functions#curried-functions"&gt;Curried functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fsharpforfunandprofit.com/posts/partial-application/"&gt;Partial application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fsharpforfunandprofit.com/posts/currying/"&gt;Currying&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/5301181/what-are-the-practical-advantages-of-currying"&gt;What are the practical advantages of currying?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.haskell.org/Currying"&gt;Currying Haskell doc.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lukajcb.github.io/blog/scala/2016/03/08/a-real-world-currying-example.html#:~:text=It%20allows%20us%20to%20easily,like%20map%20%2C%20filter%20or%20reduce%20."&gt;A real world Currying example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Partial_application"&gt;Partial application wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/List_of_mathematical_symbols"&gt;mathematical symbols&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sookocheff.com/post/fp/domain-range-codomain/"&gt;domain range codomain&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ending
&lt;/h3&gt;

&lt;p&gt;If you wanna read this post with a cool way visit my repository on github &lt;a href="https://github.com/nathancaracho/tower-of-windsock"&gt;tower-of-windsock&lt;/a&gt; and if you see any error, typo or have any question just write here I'll happy to answer you.&lt;/p&gt;

</description>
      <category>fsharp</category>
      <category>functional</category>
    </item>
  </channel>
</rss>
