{"id":989,"date":"2020-09-02T10:50:00","date_gmt":"2020-09-02T08:50:00","guid":{"rendered":"http:\/\/cmagazine.test\/lambda-calculus-functional-programming-with-no-tears\/"},"modified":"2021-12-23T11:45:00","modified_gmt":"2021-12-23T10:45:00","slug":"lambda-functional-programming","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/","title":{"rendered":"Lambda Calculus: Functional Programming With No Tears"},"content":{"rendered":"\n<script type=\"text\/javascript\">\n  if (typeof fz === \"function\")\n    fz(\"event\", {\n        \"name\": \"Lambda\",\n        \"value\": \"10\",\n        \"unit\": \"euro\"\n    });\n<\/script>\n\n\n\n<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-undefined uagb-block-e2524bf1\" data-scroll=\"true\" data-offset=\"30\" data-delay=\"800\"><div class=\"uagb-toc__wrap\"><div class=\"uagb-toc__title-wrap\"><div class=\"uagb-toc__title\">Table Of Contents<\/div><\/div><div class=\"uagb-toc__list-wrap\"><ul class=\"uagb-toc__list\"><li><a href=\"#how-lambda-calculus-works\">How Lambda Calculus works<\/a><\/li><li><a href=\"#thinking-as-a-functional-programmer\">Thinking as a Functional Programmer<\/a><\/li><li><a href=\"#conclusions\">Conclusions<\/a><\/li><\/ul><\/div><\/div><\/div>\n\n\n\n<p class=\"eplus-cVQd2R wp-block-paragraph\"><b><span id=\"urn:enhancement-58d7e40b\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/anonymous_function\">Lambda<\/span> Calculus<\/b> doesn\u2019t seem to be a suitable topic for mainstream conferences, where it must compete against numerous talks about the latest and greatest <span id=\"urn:enhancement-f450b6f5\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/technology\">technologies<\/span>, new <span id=\"urn:batch-analysis-205cc4b7-c013-4639-879d-13227efb0cd1\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/programming_languages\">programming languages<\/span> or the coolest container solution.<\/p>\n\n\n\n<p class=\"eplus-Q9Nltl wp-block-paragraph\">But <strong><span id=\"urn:batch-analysis-d9834749-17d6-4ec3-ad30-9c69045c863d\" class=\"textannotation disambiguated wl-no-link wl-organisation\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/codemotion_2\">Codemotion<\/span><\/strong> is different &#8211; you can always find an unexpected talk about unexpected topics, such as <strong>functional programming<\/strong> and <span id=\"urn:enhancement-1b7f8e09\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/lambda_calculus\">lambda calculus<\/span>. The upcoming <strong><span id=\"urn:local-annotation-841167\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/codemotion\">Codemotion<\/span> Online Tech Conference<\/strong> will take place on <strong>October 2020<\/strong>, and such topics are part of the agenda. If you are interested, don&#8217;t miss the opportunity to attend: <a href=\"https:\/\/events.codemotion.com\/conferences\/online\/2020\/codemotion-online-tech-conference\/\">free tickets are available through the website<\/a>!<\/p>\n\n\n\n<p class=\"eplus-KoKS3n wp-block-paragraph\"><span id=\"urn:enhancement-53323e54\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/functional_programming\">Functional<\/span> programming and <span id=\"urn:enhancement-c8bcc8f\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/lambda_calculus\">lambda calculus<\/span> have been also discussed in past Codemotion conference. <strong>Jarek Ratajski<\/strong>, a self-appointed <b>anarchitect<\/b>, isn\u2019t someone who goes unnoticed; in a monk\u2019s habit, with long hair and beard, he seems to come from another dimension, where Functional Programming is the everyday standard, and nobody is frightened of Monads.<\/p>\n\n\n\n<div class=\"wp-block-image eplus-1ykYqX\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/10\/M3A9668-1024x682.jpg\" alt=\"Jarek Ratajski during his talk about functional programming and lambda calculus at Codemotion Rome 2019\" class=\"wp-image-951\"\/><figcaption>Jarek Ratajski during his talk at Codemotion Rome 2019<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"eplus-q2FW3y wp-block-paragraph\">In his talk at <strong>Codemotion Rome 2019<\/strong>, Jarek demonstrates how it is possible to derive natural numbers, <span id=\"urn:enhancement-aa204455\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/boolean_algebra\">Boolean logic<\/span>, and even conditional <span id=\"urn:enhancement-e7b09b60\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/statement_computer_science\">statements<\/span> (i.e. the &#8216;if&#8217; <span id=\"urn:enhancement-4d6745ee\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/statement_computer_science\">statement<\/span>) from the definition of the identify <span id=\"urn:enhancement-5f581848\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/subroutine\">function<\/span> alone, in contrast with the conventional approach based on <span id=\"urn:enhancement-2d1adc9\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/set_theory\">Set Theory<\/span>.<\/p>\n\n\n\n<h2 class=\"eplus-GEFypQ wp-block-heading\">How Lambda Calculus works<\/h2>\n\n\n\n<p class=\"eplus-imjMpa wp-block-paragraph\">To understand how this works, please bear with me: the typical <span id=\"urn:enhancement-8659ad11\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/notation\">notation<\/span> for the identify function is \u03bb<em>x<\/em>.<em>x<\/em>, were \u03bb<em>x<\/em> represents the head of a <span id=\"urn:enhancement-43c12af2\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/subroutine\">function<\/span> with a single input <span id=\"urn:enhancement-976f8604\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/parameter\">parameter<\/span> <em>x<\/em>, followed by the body of the <span id=\"urn:enhancement-4205e679\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/subroutine\">function<\/span> after the dot (.) &#8211; in this case just the bounded variable <em>x<\/em>.<\/p>\n\n\n\n<p class=\"eplus-5EC7Ac wp-block-paragraph\">The more general notation is \u03bb<em>x<\/em>.(<i><span id=\"urn:enhancement-44390236\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/expression_mathematics\">expression<\/span><\/i>), with one input <span id=\"urn:enhancement-d678a5eb\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/parameter\">parameter<\/span> <em>x<\/em> and a generic <span id=\"urn:enhancement-f5975bdf\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/expression_mathematics\">expression<\/span> as function body.<\/p>\n\n\n\n<p class=\"eplus-riqIil wp-block-paragraph\">Then, if we consider the <span id=\"urn:enhancement-ae90287\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/anonymous_function\">lambda<\/span> \u03bb<em>x<\/em>.(\u03bb<em>y<\/em>.<em>y<\/em>), it represents a <span id=\"urn:enhancement-e39989fe\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/subroutine\">function<\/span> that returns the identity function, which can be rewritten as \u03bb<em>x<\/em>.\u03bb<em>y<\/em>.<em>y<\/em> or just \u03bb<em>xy<\/em>.<em>y<\/em>. By definition, this <span id=\"urn:enhancement-20362b56\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/anonymous_function\">lambda<\/span> represents the number 0 and all the subsequent numbers can be defined as:<\/p>\n\n\n\n<p class=\"eplus-GXoQ12 wp-block-paragraph\">   <strong>0<\/strong> \u2261 \u03bb<em>x<\/em>.\u03bb<em>y<\/em>.<em>y<\/em> = \u03bb<em>xy<\/em>.<em>y<\/em><br>   <strong>1<\/strong> \u2261 \u03bb<em>x<\/em>.\u03bb<em>y<\/em>.<em>x<\/em> <em>y<\/em> = \u03bb<em>xy<\/em>.<em>x y<\/em><br>   <strong>2<\/strong> \u2261 \u03bb<em>x<\/em>.\u03bb<em>y<\/em>.<em>x x y<\/em> = \u03bb<em>xy<\/em>.<em>x x y<\/em><br>   \u2026<br>   <em><strong>n<\/strong><\/em> \u2261 \u03bb<em>x<\/em>.\u03bb<em>y<\/em>.(<em>x<\/em> \u2026 <em>x y<\/em>) = \u03bb<em>xy<\/em>.(<em>x<\/em> \u2026 <em>x y<\/em>) &nbsp; &nbsp; with <em>x<\/em> repeated <em>n<\/em>-times<\/p>\n\n\n\n<p class=\"eplus-9SU2g6 wp-block-paragraph\">In <span id=\"urn:enhancement-f7fb0627\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/lambda_calculus\">Lambda Calculus<\/span> notation, the space (\u2018 \u2018) character represents the <span id=\"urn:enhancement-d7941c64\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_software\">application<\/span> of a <span id=\"urn:enhancement-de66cae2\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/subroutine\">function<\/span>, so if we want to apply 3 times function <em>f<\/em> to variable <em>a<\/em> we can write:<\/p>\n\n\n\n<p class=\"has-text-align-center eplus-IJrIbw wp-block-paragraph\"><b>3<\/b> <em>f a<\/em> = (\u03bb<em>xy<\/em>.(<em>x x x y<\/em>)) <em>f a<\/em> = <em>f f f a&nbsp;<\/em> &nbsp; or <em>f<\/em>(<em>f<\/em>(<em>f<\/em>(<em>a<\/em>))))<\/p>\n\n\n\n<p class=\"eplus-nmQhkD wp-block-paragraph\">In general, we can define the successor function as follows:<\/p>\n\n\n\n<p class=\"has-text-align-center eplus-OXxY36 wp-block-paragraph\">succ \u2261&nbsp; \u03bb<em>n<\/em>.\u03bb<em>f<\/em>.\u03bb<em>x<\/em>.<em>f<\/em> (<em>n f x<\/em>)<\/p>\n\n\n\n<p class=\"eplus-yqh9tM wp-block-paragraph\">then we can <span id=\"urn:enhancement-e1d86075\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/calculation\">calculate<\/span> the successor of <b>0<\/b>:<\/p>\n\n\n\n<p class=\"has-text-align-center eplus-v4EEru wp-block-paragraph\">succ <b>0<\/b> = (\u03bb<em>nfx<\/em>.<em>f<\/em> (<em>n f x<\/em>)) <b>0<\/b> = \u03bb<em>fx<\/em>.<em>f<\/em> (<b>0<\/b> <em>f x<\/em>) = \u03bb<em>fx<\/em>.<em>f x<\/em> \u2261 <b>1<\/b><\/p>\n\n\n\n<p class=\"eplus-OHQda6 wp-block-paragraph\">or we can <span id=\"urn:enhancement-693be52a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/calculation\">calculate<\/span> the successor of <b>1<\/b>:<\/p>\n\n\n\n<p class=\"has-text-align-center eplus-Ts2npd wp-block-paragraph\">succ <b>1<\/b> = (\u03bb<em>nfx<\/em>.<em>f<\/em> (<em>n f x<\/em>)) <b>1<\/b> = \u03bb<em>fx<\/em>.<em>f<\/em> (<b>1<\/b> <em>f x<\/em>) = \u03bb<em>fx<\/em>.<em>f f x<\/em> \u2261 <b>2<\/b><\/p>\n\n\n\n<p class=\"eplus-CdJvbn wp-block-paragraph\">and so on.<\/p>\n\n\n\n<p class=\"eplus-mklQww wp-block-paragraph\">We can continue using this notation to define the predecessor function, so we can now determine the sum and the difference.<\/p>\n\n\n\n<p class=\"eplus-cYrFW6 wp-block-paragraph\">It\u2019s also easy to incorporate <span id=\"urn:enhancement-81ff0057\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/boolean_algebra\">Boolean logic<\/span> by introducing the \u2018true\u2019 and \u2018false\u2019 functions:<\/p>\n\n\n\n<p class=\"eplus-HrfuaZ wp-block-paragraph\"><b>&nbsp;&nbsp;&nbsp;T<\/b> \u2261 \u03bb<em>xy<\/em>.<em>y<\/em><\/p>\n\n\n\n<p class=\"eplus-QCKfC1 wp-block-paragraph\"><b>&nbsp;&nbsp;&nbsp;F<\/b> \u2261 \u03bb<em>xy<\/em>.<em>x<\/em><\/p>\n\n\n\n<p class=\"eplus-8IuLn8 wp-block-paragraph\">and then the \u2018and\u2019 and \u2018or\u2019:<\/p>\n\n\n\n<p class=\"eplus-yeRBul wp-block-paragraph\"><b>&nbsp;&nbsp;&nbsp;and<\/b> \u2261 \u03bb<em>pq<\/em>.<em>p q p<\/em><\/p>\n\n\n\n<p class=\"eplus-1WnoVZ wp-block-paragraph\"><b>&nbsp;&nbsp;&nbsp;or<\/b> \u2261 \u03bb<em>pq<\/em>.<em>p p q<\/em><\/p>\n\n\n\n<p class=\"eplus-rionIh wp-block-paragraph\">Starting with these simple building blocks, we are gently introduced to the basis of <span id=\"urn:enhancement-c01f601c\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/lambda_calculus\">Lambda Calculus<\/span>, defined by <b>Alonzo <span id=\"urn:enhancement-9b01c591\" class=\"textannotation disambiguated wl-person\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/alonzo_church\">Church<\/span><\/b> in the 1930s as the theoretical foundation of function recursion and, to an even greater extent, of <span id=\"urn:enhancement-4293d694\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/functional_programming\">Functional Programming<\/span>, as opposed to the Imperative Programming founded on <b><span id=\"urn:enhancement-b8454170\" class=\"textannotation disambiguated wl-person\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/alan_turing\">Turing<\/span>\u2019s Machine<\/b>.<\/p>\n\n\n\n<h2 class=\"eplus-65kvLl wp-block-heading\">Thinking as a Functional Programmer<\/h2>\n\n\n\n<p class=\"eplus-1ZktSr wp-block-paragraph\"><q>If you want to understand <span id=\"urn:enhancement-633afa61\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/lambda_calculus\">Lambda Calculus<\/span>, you should stop thinking about <span id=\"urn:enhancement-b27ae735\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/subroutine\">functions<\/span> as we\u2019ve been always taught &#8211; as something that associates an element of a <span id=\"urn:enhancement-fef1c664\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/set_mathematics\">Set<\/span> to an element of another <span id=\"urn:enhancement-11100552\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/set_mathematics\">Set<\/span><\/q><\/p>\n\n\n\n<p class=\"eplus-g8PkA0 wp-block-paragraph\">This strange universe where nothing exists except Lambdas might look unpleasant and scary. However, <b><span id=\"urn:enhancement-9b6e1e89\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/lambda_calculus\">Lambda Calculus<\/span> is <span id=\"urn:enhancement-125c3396\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/turing_completeness\">Turing Complete<\/span><\/b>, so anything we can write in an imperative style, with <span id=\"urn:batch-analysis-dc632623-cf60-4527-a05d-656d3bbcc80d\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/programming_languages\">programming languages<\/span> such as <span id=\"urn:batch-analysis-0e69e100-95d8-4725-b45c-4083e86c9e9f\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/java\">Java<\/span> or <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/backend-dev\/testing-your-c-code-with-xunit\/\"><span id=\"urn:local-annotation-435640\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/c_sharp_programming_language\">C#<\/span><\/a>, can also be written in functional way in languages such as <span id=\"urn:enhancement-95553c31\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/scala_programming_language\">Scala<\/span> or <span id=\"urn:enhancement-85db81a8\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/haskell_programming_language\">Haskell<\/span>.<\/p>\n\n\n\n<p class=\"eplus-t5dtVv wp-block-paragraph\">One could, of course, argue that we have known that since the \u201830s, but <span id=\"urn:enhancement-760fc507\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/functional_programming\">Functional Programming<\/span> now seems to be hot again, being more suitable for modern multi-threaded or distributed <span id=\"urn:enhancement-450b2d19\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_software\">applications<\/span>.<\/p>\n\n\n\n<p class=\"eplus-x3qwVM wp-block-paragraph\">Adopting this programming approach can be somewhat intimidating but, as Jarek Ratajski said in his talk, if you go back to basics this path can be both fun and profitable\u2026 and it doesn\u2019t require a PhD in <span id=\"urn:enhancement-7b9b9b4c\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mathematics\">Mathematics<\/span>!<\/p>\n\n\n\n<p class=\"eplus-6RvgoL wp-block-paragraph\">It might seem that this means that the solution to our (technical) problems is at hand, that this is the silver bullet that will make our code error-free and our <span id=\"urn:enhancement-7cea4f77\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_architecture\">architecture<\/span> solid as a rock\u2026 unfortunately, this is not the case and these strong, theoretical fundamentals can actually betray us!<\/p>\n\n\n\n<p class=\"eplus-16S9hl wp-block-paragraph\"><q>You know when you create your beautiful <span id=\"urn:enhancement-f087b196\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_architecture\">architecture<\/span>, but your customer changes requirements every day and <b>your <span id=\"urn:enhancement-e6518d88\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_architecture\">architecture<\/span>\u2026. goes bananas<\/b>!<\/q><\/p>\n\n\n\n<h2 class=\"eplus-s6TBY8 wp-block-heading\">Conclusions<\/h2>\n\n\n\n<p class=\"eplus-0UhWTf wp-block-paragraph\">During his talk at Codemotion Rome 2019, Jarek Ratajski reminded us of one of the most important results derived from <span id=\"urn:enhancement-a0895f25\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/anonymous_function\">Lambda<\/span> Calculus: <span id=\"urn:enhancement-6cf18b88\" class=\"textannotation disambiguated wl-person\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/alonzo_church\">Church<\/span>&#8216;s proof that there are <span id=\"urn:enhancement-7e6511e3\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/undecidable_problem\">unsolvable<\/span> problems &#8211; <span id=\"urn:enhancement-ae87cabc\" class=\"textannotation disambiguated wl-person\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/david_hilbert\">Hilbert<\/span>\u2019s <b><span id=\"urn:enhancement-49c607ce\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/entscheidungsproblem\">Entscheidungsproblem<\/span><\/b> &#8211; such as computable procedures which can decide whether two given terms convert to one another, as in <span id=\"urn:enhancement-91755273\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/godels_incompleteness_theorems\">G\u00f6del&#8217;s first incompleteness theorem<\/span>.<\/p>\n\n\n\n<p class=\"eplus-h5l0MK wp-block-paragraph\"><q>The barber is the &#8220;one who shaves all those, and those only, who do not shave themselves.&#8221; The question is, does the barber shave himself?<\/q><\/p>\n\n\n\n<p class=\"eplus-WCU7gw wp-block-paragraph\">This means that our code can never be perfect and, worse still, that there is no code that can prove that. Despite that, we should keep coding and, above all, have fun with it.<\/p>\n\n\n\n<p class=\"eplus-thH50V wp-block-paragraph\">The <span id=\"urn:batch-analysis-d70b3bb5-641f-40fc-8c21-931d5a58e1ca\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">source code<\/span> for Jarek\u2019s library can be found on <a aria-label=\"undefined (opens in a new tab)\" href=\"https:\/\/github.com\/jarekratajski\/badlam\" target=\"_blank\" rel=\"noreferrer noopener\"><span id=\"urn:local-annotation-536985\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/github\">GitHub<\/span><\/a> if you are willing to give it a try. Be careful though! Because of the <span id=\"urn:enhancement-ffac6df2\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/undecidable_problem\">undecidability<\/span> <span id=\"urn:enhancement-19249d3d\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/theorem\">theorem<\/span>, there is a strong possibility that his <span id=\"urn:batch-analysis-08868cc0-b110-4a5a-af64-0f83a8ee8814\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cogito_software\">software<\/span> does not work!<\/p>\n\n\n\n<p class=\"eplus-ALm3cv wp-block-paragraph\">Finally, if you are interested in functional programming and <span style=\"user-select: auto;\" id=\"urn:enhancement-4fed6035\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/anonymous_function\">lambda<\/span> calculus, don&#8217;t miss the opportunity to attend our upcoming Codemotion Online Tech Conference: there are also <span style=\"user-select: auto;\" id=\"urn:enhancement-bffe7abd\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/free_software\">free<\/span> tickets!<\/p>\n\n\n\n<p class=\"eplus-11OexP wp-block-paragraph\">If you want to know more about how modern technologies and tools can support you for &#8211; and during &#8211; the organisation of a virtual event, don&#8217;t miss this article showcasing the best tools we used to <a href=\"https:\/\/www.codemotion.com\/magazine\/articles\/events\/planning-virtual-conference\/\">host our online conferences<\/a> since the COVID-19 outbreak.<\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Table Of Contents How Lambda Calculus works Thinking as a Functional Programmer Conclusions Lambda Calculus doesn\u2019t seem to be a suitable topic for mainstream conferences, where it must compete against numerous talks about the latest and greatest technologies, new programming languages or the coolest container solution. But Codemotion is different &#8211; you can always find&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/\">Read more<\/a><\/p>\n","protected":false},"author":78,"featured_media":7370,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":4,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[20],"tags":[4,3412],"collections":[],"class_list":["post-989","post","type-post","status-publish","format-standard","has-post-thumbnail","category-languages","tag-codemotion-rome","tag-functional-programming","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v28.1) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Lambda Calculus: Functional Programming With No Tears - Codemotion<\/title>\n<meta name=\"description\" content=\"In this article we went back to the basics of functional programming and lambda calculus, a re-emerging paradigm that is one of the foundations of recursion\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lambda Calculus: Functional Programming With No Tears\" \/>\n<meta property=\"og:description\" content=\"In this article we went back to the basics of functional programming and lambda calculus, a re-emerging paradigm that is one of the foundations of recursion\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-09-02T08:50:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-23T10:45:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Giulio Santoli\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Giulio Santoli\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/languages\\\/lambda-functional-programming\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/languages\\\/lambda-functional-programming\\\/\"},\"author\":{\"name\":\"Giulio Santoli\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/78724c72ca338c9284af66f96834e13d\"},\"headline\":\"Lambda Calculus: Functional Programming With No Tears\",\"datePublished\":\"2020-09-02T08:50:00+00:00\",\"dateModified\":\"2021-12-23T10:45:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/languages\\\/lambda-functional-programming\\\/\"},\"wordCount\":1066,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/languages\\\/lambda-functional-programming\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/bigstock-Functional-Programming-Code-231296137.jpg\",\"keywords\":[\"Codemotion Rome\",\"Functional Programming\"],\"articleSection\":[\"Languages and frameworks\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/languages\\\/lambda-functional-programming\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/languages\\\/lambda-functional-programming\\\/\",\"name\":\"Lambda Calculus: Functional Programming With No Tears - Codemotion\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/languages\\\/lambda-functional-programming\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/languages\\\/lambda-functional-programming\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/bigstock-Functional-Programming-Code-231296137.jpg\",\"datePublished\":\"2020-09-02T08:50:00+00:00\",\"dateModified\":\"2021-12-23T10:45:00+00:00\",\"description\":\"In this article we went back to the basics of functional programming and lambda calculus, a re-emerging paradigm that is one of the foundations of recursion\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/languages\\\/lambda-functional-programming\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/languages\\\/lambda-functional-programming\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/languages\\\/lambda-functional-programming\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/bigstock-Functional-Programming-Code-231296137.jpg\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/bigstock-Functional-Programming-Code-231296137.jpg\",\"width\":1200,\"height\":675,\"caption\":\"Functional Programming Code - Declarative Paradigm Lambda Calculus\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/languages\\\/lambda-functional-programming\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dev Life\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/dev-life\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Events\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/dev-life\\\/events\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Lambda Calculus: Functional Programming With No Tears\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Codemotion.Italy\\\/\",\"https:\\\/\\\/x.com\\\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/78724c72ca338c9284af66f96834e13d\",\"name\":\"Giulio Santoli\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1da3739dfc37d273c4fb6905f81a0d8d3be3c036a4878d4c71ba3c9728cc0c8c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1da3739dfc37d273c4fb6905f81a0d8d3be3c036a4878d4c71ba3c9728cc0c8c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1da3739dfc37d273c4fb6905f81a0d8d3be3c036a4878d4c71ba3c9728cc0c8c?s=96&d=mm&r=g\",\"caption\":\"Giulio Santoli\"},\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/author\\\/giulio-santoli\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Lambda Calculus: Functional Programming With No Tears - Codemotion","description":"In this article we went back to the basics of functional programming and lambda calculus, a re-emerging paradigm that is one of the foundations of recursion","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/","og_locale":"en_US","og_type":"article","og_title":"Lambda Calculus: Functional Programming With No Tears","og_description":"In this article we went back to the basics of functional programming and lambda calculus, a re-emerging paradigm that is one of the foundations of recursion","og_url":"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2020-09-02T08:50:00+00:00","article_modified_time":"2021-12-23T10:45:00+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137.jpg","type":"image\/jpeg"}],"author":"Giulio Santoli","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Giulio Santoli","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/"},"author":{"name":"Giulio Santoli","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/78724c72ca338c9284af66f96834e13d"},"headline":"Lambda Calculus: Functional Programming With No Tears","datePublished":"2020-09-02T08:50:00+00:00","dateModified":"2021-12-23T10:45:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/"},"wordCount":1066,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137.jpg","keywords":["Codemotion Rome","Functional Programming"],"articleSection":["Languages and frameworks"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/","url":"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/","name":"Lambda Calculus: Functional Programming With No Tears - Codemotion","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137.jpg","datePublished":"2020-09-02T08:50:00+00:00","dateModified":"2021-12-23T10:45:00+00:00","description":"In this article we went back to the basics of functional programming and lambda calculus, a re-emerging paradigm that is one of the foundations of recursion","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137.jpg","width":1200,"height":675,"caption":"Functional Programming Code - Declarative Paradigm Lambda Calculus"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/languages\/lambda-functional-programming\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Dev Life","item":"https:\/\/www.codemotion.com\/magazine\/dev-life\/"},{"@type":"ListItem","position":3,"name":"Events","item":"https:\/\/www.codemotion.com\/magazine\/dev-life\/events\/"},{"@type":"ListItem","position":4,"name":"Lambda Calculus: Functional Programming With No Tears"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/78724c72ca338c9284af66f96834e13d","name":"Giulio Santoli","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/1da3739dfc37d273c4fb6905f81a0d8d3be3c036a4878d4c71ba3c9728cc0c8c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1da3739dfc37d273c4fb6905f81a0d8d3be3c036a4878d4c71ba3c9728cc0c8c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1da3739dfc37d273c4fb6905f81a0d8d3be3c036a4878d4c71ba3c9728cc0c8c?s=96&d=mm&r=g","caption":"Giulio Santoli"},"url":"https:\/\/www.codemotion.com\/magazine\/author\/giulio-santoli\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137-600x600.jpg","author_info":{"display_name":"Giulio Santoli","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/giulio-santoli\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137.jpg",1200,675,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137-300x169.jpg",300,169,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137-768x432.jpg",768,432,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137-1024x576.jpg",1024,576,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137.jpg",1200,675,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137.jpg",1200,675,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137.jpg",100,56,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/bigstock-Functional-Programming-Code-231296137-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Giulio Santoli","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/giulio-santoli\/"},"uagb_comment_info":0,"uagb_excerpt":"Table Of Contents How Lambda Calculus works Thinking as a Functional Programmer Conclusions Lambda Calculus doesn\u2019t seem to be a suitable topic for mainstream conferences, where it must compete against numerous talks about the latest and greatest technologies, new programming languages or the coolest container solution. But Codemotion is different &#8211; you can always find&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/989","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=989"}],"version-history":[{"count":16,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/989\/revisions"}],"predecessor-version":[{"id":11712,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/989\/revisions\/11712"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/7370"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=989"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}