{"id":2610,"date":"2021-11-14T09:20:37","date_gmt":"2021-11-14T03:50:37","guid":{"rendered":"https:\/\/www.rangakrish.com\/?p=2610"},"modified":"2021-11-14T09:20:37","modified_gmt":"2021-11-14T03:50:37","slug":"currying-in-newlisp","status":"publish","type":"post","link":"https:\/\/www.rangakrish.com\/index.php\/2021\/11\/14\/currying-in-newlisp\/","title":{"rendered":"Currying in &#8220;newLisp&#8221;"},"content":{"rendered":"<p>In the last two articles, I discussed what I believe are some interesting features of <a href=\"http:\/\/www.newlisp.org\" target=\"_blank\" rel=\"noopener\"><em><strong>&#8220;newLisp&#8221;<\/strong><\/em><\/a>. Today&#8217;s topic is <em><strong>&#8220;currying&#8221;<\/strong><\/em>, another useful feature.<\/p>\n<p>For those of you who are new to this topic, I had earlier written about <em><strong>&#8220;currying&#8221;<\/strong><\/em> in <em><strong>Mathematica<\/strong> <a href=\"https:\/\/www.rangakrish.com\/index.php\/2019\/05\/19\/currying-in-mathematica\/\" target=\"_blank\" rel=\"noopener\"><strong>here<\/strong><\/a><\/em>. You may want to take a look at that too.<\/p>\n<p>Unlike, for example, <a href=\"https:\/\/wiki.haskell.org\/Currying\" target=\"_blank\" rel=\"noopener\"><em><strong>Haskell<\/strong><\/em><\/a>, <em><strong>&#8220;currying&#8221;<\/strong><\/em> is not supported by default in <em><strong>&#8220;newLisp&#8221;<\/strong><\/em>. Instead, there is a function called <em><strong>&#8220;curry&#8221;<\/strong><\/em> that must be explicitly called to get the required behavior.<\/p>\n<p>Simply put, the function <em><strong>&#8220;curry&#8221;<\/strong><\/em> transforms a 2-argument function to a single argument function by bundling in the first (left most) argument. Further, it does not evaluate its arguments.<\/p>\n<p>Let us look at an example:<\/p>\n<figure id=\"attachment_2611\" aria-describedby=\"caption-attachment-2611\" style=\"width: 500px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example1.jpg?ssl=1\"><img data-recalc-dims=\"1\" fetchpriority=\"high\" decoding=\"async\" data-attachment-id=\"2611\" data-permalink=\"https:\/\/www.rangakrish.com\/index.php\/2021\/11\/14\/currying-in-newlisp\/example1-25\/\" data-orig-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example1.jpg\" data-orig-size=\"461,216\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Admin&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1636822801&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Example of Currying\" data-image-description=\"&lt;p&gt;Example of Currying&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Example of Currying&lt;\/p&gt;\n\" data-large-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example1.jpg\" class=\"wp-image-2611\" src=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example1.jpg?resize=500%2C234&#038;ssl=1\" alt=\"Example of Currying\" width=\"500\" height=\"234\" srcset=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example1.jpg?resize=300%2C141&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example1.jpg?w=461&amp;ssl=1 461w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><figcaption id=\"caption-attachment-2611\" class=\"wp-caption-text\"><strong>Example of Currying<\/strong><\/figcaption><\/figure>\n<p>We first define a function called <em><strong>\u201cbar\u201d<\/strong><\/em> that takes two arguments and subtracts the second from the first as its computation.<\/p>\n<p>We then <em><strong>\u201ccurry\u201d<\/strong><\/em> this function to get a new function, by passing <em><strong>\u201c10\u201d<\/strong><\/em> as the fixed first argument. The returned function object is stored in the variable <em><strong>\u201cbar2\u201d<\/strong><\/em>.<\/p>\n<p>When we call <em><strong>\u201cbar2\u201d<\/strong> <\/em>by passing 4, we get 6 as expected. This is exactly the same as calling <em><strong>\u201cbar\u201d<\/strong><\/em> with arguments 10 and 4.<\/p>\n<p>Here are some more usage patterns:<\/p>\n<figure id=\"attachment_2612\" aria-describedby=\"caption-attachment-2612\" style=\"width: 500px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example2.jpg?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"2612\" data-permalink=\"https:\/\/www.rangakrish.com\/index.php\/2021\/11\/14\/currying-in-newlisp\/example2-21\/\" data-orig-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example2.jpg\" data-orig-size=\"431,216\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Admin&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1636823467&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"More Examples\" data-image-description=\"&lt;p&gt;More Examples&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;More Examples&lt;\/p&gt;\n\" data-large-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example2.jpg\" class=\"wp-image-2612\" src=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example2.jpg?resize=500%2C251&#038;ssl=1\" alt=\"More Examples\" width=\"500\" height=\"251\" srcset=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example2.jpg?resize=300%2C150&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example2.jpg?w=431&amp;ssl=1 431w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><figcaption id=\"caption-attachment-2612\" class=\"wp-caption-text\"><strong>More Examples<\/strong><\/figcaption><\/figure>\n<p>As you can see, <em><strong>\u201ccurrying\u201d<\/strong><\/em> simplifies certain function calls and makes the code more readable.<\/p>\n<p>If you look at the <em><strong>\u201clambda\u201d<\/strong><\/em> returned from <em><strong>\u201ccurry\u201d<\/strong><\/em>, you can see that it names its single in-coming argument as <em><strong>\u201c$x\u201d<\/strong><\/em>. We can therefore use this name in our <em><strong>bundled<\/strong><\/em> argument expression!<\/p>\n<figure id=\"attachment_2613\" aria-describedby=\"caption-attachment-2613\" style=\"width: 500px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example3.jpg?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"2613\" data-permalink=\"https:\/\/www.rangakrish.com\/index.php\/2021\/11\/14\/currying-in-newlisp\/example3-18\/\" data-orig-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example3.jpg\" data-orig-size=\"516,165\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Admin&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1636825529&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Using &amp;#8220;$x&amp;#8221; in Curry\" data-image-description=\"&lt;p&gt;Using &amp;#8220;$x&amp;#8221; in Curry&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Using &amp;#8220;$x&amp;#8221; in Curry&lt;\/p&gt;\n\" data-large-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example3.jpg\" class=\"wp-image-2613\" src=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example3.jpg?resize=500%2C160&#038;ssl=1\" alt=\"Using &quot;$x&quot; in Curry\" width=\"500\" height=\"160\" srcset=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example3.jpg?resize=300%2C96&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example3.jpg?w=516&amp;ssl=1 516w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><figcaption id=\"caption-attachment-2613\" class=\"wp-caption-text\"><strong>Using &#8220;$x&#8221; in Curry<\/strong><\/figcaption><\/figure>\n<p>Please remember that <em><strong>\u201ccurry\u201d<\/strong><\/em> does not evaluate its arguments. So watch out for situations like this:<\/p>\n<figure id=\"attachment_2614\" aria-describedby=\"caption-attachment-2614\" style=\"width: 500px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example4.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2614\" data-permalink=\"https:\/\/www.rangakrish.com\/index.php\/2021\/11\/14\/currying-in-newlisp\/example4-13\/\" data-orig-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example4.jpg\" data-orig-size=\"523,243\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Admin&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1636875108&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Curry Argument Not Evaluated\" data-image-description=\"&lt;p&gt;Curry Argument Not Evaluated&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Curry Argument Not Evaluated&lt;\/p&gt;\n\" data-large-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example4.jpg\" class=\"wp-image-2614\" src=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example4.jpg?resize=500%2C232&#038;ssl=1\" alt=\"Curry Argument Not Evaluated\" width=\"500\" height=\"232\" srcset=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example4.jpg?resize=300%2C139&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example4.jpg?w=523&amp;ssl=1 523w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><figcaption id=\"caption-attachment-2614\" class=\"wp-caption-text\"><strong>Curry Argument Not Evaluated<\/strong><\/figcaption><\/figure>\n<p>In the above example, if we use <em><strong>\u201cletex\u201d<\/strong><\/em> instead of <em><strong>\u201clet\u201d<\/strong><\/em>, then this is what we get:<\/p>\n<figure id=\"attachment_2615\" aria-describedby=\"caption-attachment-2615\" style=\"width: 500px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example5.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2615\" data-permalink=\"https:\/\/www.rangakrish.com\/index.php\/2021\/11\/14\/currying-in-newlisp\/example5-10\/\" data-orig-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example5.jpg\" data-orig-size=\"542,124\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Admin&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1636875184&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"&amp;#8220;letex&amp;#8221; Expands Statically\" data-image-description=\"&lt;p&gt;&amp;#8220;letex&amp;#8221; Expands Statically&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;&amp;#8220;letex&amp;#8221; Expands Statically&lt;\/p&gt;\n\" data-large-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example5.jpg\" class=\"wp-image-2615\" src=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example5.jpg?resize=500%2C114&#038;ssl=1\" alt=\"&quot;letex&quot; Expands Statically\" width=\"500\" height=\"114\" srcset=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example5.jpg?resize=300%2C69&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example5.jpg?w=542&amp;ssl=1 542w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><figcaption id=\"caption-attachment-2615\" class=\"wp-caption-text\"><strong>&#8220;letex&#8221; Substitutes Argument<\/strong><\/figcaption><\/figure>\n<p>Notice that in this case, <em><strong>\u201cletex\u201d<\/strong><\/em> has substituted the <em><strong>\u201cx\u201d<\/strong><\/em> inside <em><strong>\u201ccurry\u201d<\/strong><\/em> with its initial value.<\/p>\n<p>I think the discussion so far adequately covers the different use cases of <em><strong>\u201ccurry\u201d<\/strong><\/em>. The fact that <em><strong>\u201ccurrying\u201d<\/strong><\/em> is not supported by default in <em><strong>\u201cnewLisp\u201d<\/strong><\/em> or that it is limited to 2-argument functions could a limitation, but I feel it is useful even as it is.<\/p>\n<p>Have a great weekend!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the last two articles, I discussed what I believe are some interesting features of &#8220;newLisp&#8221;. Today&#8217;s topic is &#8220;currying&#8221;, another useful feature. For those of you who are new to this topic, I had earlier written about &#8220;currying&#8221; in Mathematica here. You may want to take a look at that too. Unlike, for example, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[297,17],"tags":[209,298],"class_list":["post-2610","post","type-post","status-publish","format-standard","hentry","category-newlisp","category-programming","tag-currying","tag-newlisp"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9OLnF-G6","jetpack-related-posts":[{"id":1581,"url":"https:\/\/www.rangakrish.com\/index.php\/2019\/05\/19\/currying-in-mathematica\/","url_meta":{"origin":2610,"position":0},"title":"Currying in Mathematica","author":"admin","date":"May 19, 2019","format":false,"excerpt":"One of the more recent additions to the core Wolfram Language is the \u201cCurry\u201d function. It was introduced in Mathematica ver 11.3 and is still (as of ver 12.0) considered Experimental. In this post, I would like to go over this function briefly. Non-curried functions in Mathematica have to be\u2026","rel":"","context":"In &quot;LISP&quot;","block_context":{"text":"LISP","link":"https:\/\/www.rangakrish.com\/index.php\/category\/lisp\/"},"img":{"alt_text":"Lisp Currying Examples","src":"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2019\/05\/Lisp-Usage.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2580,"url":"https:\/\/www.rangakrish.com\/index.php\/2021\/10\/17\/some-interesting-features-of-newlisp\/","url_meta":{"origin":2610,"position":1},"title":"Some Interesting Features of &#8220;newLisp&#8221;","author":"admin","date":"October 17, 2021","format":false,"excerpt":"newLisp is a general-purpose scripting language with a Lisp-like syntax. That is one of the reasons I wanted to take a closer look at the language. It has a compact footprint, small resource requirements, and can easily be embedded. It is available on multiple platforms, and on my Windows machine,\u2026","rel":"","context":"In &quot;newLisp&quot;","block_context":{"text":"newLisp","link":"https:\/\/www.rangakrish.com\/index.php\/category\/newlisp\/"},"img":{"alt_text":"\"amb\" Function","src":"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/10\/example1.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2632,"url":"https:\/\/www.rangakrish.com\/index.php\/2021\/12\/12\/the-net-eval-function-in-newlisp\/","url_meta":{"origin":2610,"position":2},"title":"The &#8220;net-eval&#8221; Function in &#8220;newLisp&#8221;","author":"admin","date":"December 12, 2021","format":false,"excerpt":"One of the cool\u00a0things about \"newLisp\" is that despite its small fooprint, it comes with a lot of functionality built-in. For instance, if you are interested in distributed computing, it is pretty easy to get started. In this article, I will touch upon the net-eval function\u00a0that allows an expression to\u2026","rel":"","context":"In &quot;LISP&quot;","block_context":{"text":"LISP","link":"https:\/\/www.rangakrish.com\/index.php\/category\/lisp\/"},"img":{"alt_text":"Two Servers","src":"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/12\/Servers-300x253.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2593,"url":"https:\/\/www.rangakrish.com\/index.php\/2021\/11\/01\/implicit-indexing-and-slicing-in-newlisp\/","url_meta":{"origin":2610,"position":3},"title":"Implicit Indexing and Slicing in &#8220;newLisp&#8221;","author":"admin","date":"November 1, 2021","format":false,"excerpt":"In traditional Lisp (Common Lisp), when evaluating an S-expression list, the first element in the \"functor\" position must be a function or valid operator. newLisp\u00a0relaxes this requirement and allows the first element to be a context symbol type, a list, an array, or an integer. For today's discussion, let us\u2026","rel":"","context":"In &quot;newLisp&quot;","block_context":{"text":"newLisp","link":"https:\/\/www.rangakrish.com\/index.php\/category\/newlisp\/"},"img":{"alt_text":"List Indexing","src":"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/list1-300x141.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2620,"url":"https:\/\/www.rangakrish.com\/index.php\/2021\/11\/28\/understanding-the-unify-function-in-newlisp\/","url_meta":{"origin":2610,"position":4},"title":"Understanding the &#8220;unify&#8221; Function in &#8220;newLisp&#8221;","author":"admin","date":"November 28, 2021","format":false,"excerpt":"Unification between two symbolic expressions involves finding substitutions for variables (if any) in the expressions such that the expressions match\u00a0after applying the substitutions. This is a powerful idea and is quite common in logic programming languages such as Prolog. Interestingly, \"newLisp\" has a buil-in function called \"unify\" that can be\u2026","rel":"","context":"In &quot;newLisp&quot;","block_context":{"text":"newLisp","link":"https:\/\/www.rangakrish.com\/index.php\/category\/newlisp\/"},"img":{"alt_text":"Unifying \"atomic\" expressions","src":"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/11\/Example1-1-300x106.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1278,"url":"https:\/\/www.rangakrish.com\/index.php\/2018\/12\/02\/book-review-functional-programming-in-c\/","url_meta":{"origin":2610,"position":5},"title":"Book Review: Functional Programming in C++","author":"admin","date":"December 2, 2018","format":false,"excerpt":"Title: Functional Programming in C++: How to improve your C++ programs using functional techniques Author: Ivan Cukic Publisher: Manning Publications Co. Year: 2019 This book came out recently, about a week ago. I bought it immediately, and when I started to read it, I couldn\u2019t put it down! Very informative\u2026","rel":"","context":"In &quot;Book Review&quot;","block_context":{"text":"Book Review","link":"https:\/\/www.rangakrish.com\/index.php\/category\/book-review\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/posts\/2610","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/comments?post=2610"}],"version-history":[{"count":0,"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/posts\/2610\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/media?parent=2610"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/categories?post=2610"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/tags?post=2610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}