{"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\"><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\">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\"><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\">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\">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\">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\">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\">   <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\">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\"><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\">In general, we can define the successor function as follows:<\/p>\n\n\n\n<p class=\"has-text-align-center eplus-OXxY36\">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\">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\">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\">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\">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\">and so on.<\/p>\n\n\n\n<p class=\"eplus-mklQww\">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\">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\"><b>&nbsp;&nbsp;&nbsp;T<\/b> \u2261 \u03bb<em>xy<\/em>.<em>y<\/em><\/p>\n\n\n\n<p class=\"eplus-QCKfC1\"><b>&nbsp;&nbsp;&nbsp;F<\/b> \u2261 \u03bb<em>xy<\/em>.<em>x<\/em><\/p>\n\n\n\n<p class=\"eplus-8IuLn8\">and then the \u2018and\u2019 and \u2018or\u2019:<\/p>\n\n\n\n<p class=\"eplus-yeRBul\"><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\"><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\">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\"><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\">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\">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\">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\">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\"><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\">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\"><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\">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\">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\">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\">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":{"0":"post-989","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-languages","8":"tag-codemotion-rome","9":"tag-functional-programming","10":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v27.5) - 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}]}}