{"id":665,"date":"2011-12-01T04:03:24","date_gmt":"2011-12-01T04:03:24","guid":{"rendered":"http:\/\/www.ericwhite.com\/home2\/bm8qcmjy\/public_html\/blog\/?page_id=665"},"modified":"2019-09-29T14:41:02","modified_gmt":"2019-09-29T14:41:02","slug":"functional-programming-condensed","status":"publish","type":"page","link":"https:\/\/www.ericwhite.com\/blog\/functional-programming-condensed\/","title":{"rendered":"Functional Programming"},"content":{"rendered":"<h2 style=\"font-size: small;\"><a href=\"https:\/\/www.ericwhite.com\/blog\/toc-condensed\">Back to TOC<\/a><a style=\"position: relative; left: 1em;\" href=\"https:\/\/www.ericwhite.com\/blog\/functional-programming-video-condensed\">Just Videos<\/a><span style=\"position: relative; left: 2em;\"><a href=\"https:\/\/www.ericwhite.com\/blog\/functional-programming-expanded\">Expanded TOC<\/a><\/span><\/h2>\n<p>Language Integrated Query, when used properly, enables you to build powerful applications in the functional programming style. Pure functional transformations are my recommended approach to document manipulation.<\/p>\n<ul>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2006\/10\/04\/fp-tutorial.aspx\" target=\"_blank\" rel=\"noopener\">Query Composition using Functional Programming Techniques in C# 3.0<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2007\/12\/06\/performance-of-chained-queries.aspx\" target=\"_blank\" rel=\"noopener\">Performance of Chained Queries<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2007\/12\/06\/atomized-xname-and-xnamespace-objects.aspx\" target=\"_blank\" rel=\"noopener\">Atomized XName and XNamespace Objects<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2007\/12\/06\/preatomization-of-xname-objects.aspx\" target=\"_blank\" rel=\"noopener\">Preatomization of XName Objects<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2007\/12\/06\/statically-compiled-queries.aspx\" target=\"_blank\" rel=\"noopener\">Statically Compiled Queries<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2007\/12\/06\/performance-of-linq-to-xml.aspx\" target=\"_blank\" rel=\"noopener\">Performance of LINQ to XML<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/04\/21\/the-groupadjacent-extension-method.aspx\" target=\"_blank\" rel=\"noopener\">The GroupAdjacent Extension Method<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/07\/10\/how-to-create-hierarchy-from-flat-data-using-linq.aspx\" target=\"_blank\" rel=\"noopener\">How to Create Hierarchy from Flat Data using LINQ<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/07\/14\/writing-robust-linq-to-xml-code-that-performs-well.aspx\" target=\"_blank\" rel=\"noopener\">Writing Robust LINQ to XML Code that Performs Well<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/07\/24\/are-developers-using-linq.aspx\" target=\"_blank\" rel=\"noopener\">Are Developers Using LINQ?<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/07\/26\/are-developers-using-linq-part-2.aspx\" target=\"_blank\" rel=\"noopener\">Are Developers Using LINQ? (Part 2)<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/08\/03\/linq-reduces-line-counts-and-makes-code-pop.aspx\" target=\"_blank\" rel=\"noopener\">Generating a LINQ to XML Tree from Anonymous Types<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/08\/19\/chunking-a-collection-into-groups-of-three.aspx\" target=\"_blank\" rel=\"noopener\">Chunking a Collection into Groups of Three<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/08\/19\/use-a-lambda-expression-for-an-event-handler.aspx\" target=\"_blank\" rel=\"noopener\">Use a Lambda Expression for an Event Handler<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/08\/19\/find-duplicates-using-linq.aspx\" target=\"_blank\" rel=\"noopener\">Find Duplicates using LINQ<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/09\/12\/closures.aspx\" target=\"_blank\" rel=\"noopener\">Closures<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/09\/30\/linq-to-text-and-linq-to-csv.aspx\" target=\"_blank\" rel=\"noopener\">LINQ to TEXT and LINQ to CSV<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/10\/06\/formatting-linq-code.aspx\" target=\"_blank\" rel=\"noopener\">Formatting LINQ Code<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/10\/12\/using-linq-to-xml-events-and-annotations-to-track-if-an-xml-tree-has-changed.aspx\" target=\"_blank\" rel=\"noopener\">Using LINQ to XML Events and Annotations to Track if an XML Tree has Changed<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/10\/24\/comparing-linq-to-xml-and-xpath.aspx\" target=\"_blank\" rel=\"noopener\">Comparing LINQ to XML and XPath<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/10\/29\/anders-hejlsberg-introduces-c-4-0-at-pdc-2008.aspx\" target=\"_blank\" rel=\"noopener\">Anders Hejlsberg Introduces C# 4.0 at PDC 2008<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/11\/07\/debugging-linq-queries.aspx\" target=\"_blank\" rel=\"noopener\">Debugging LINQ Queries<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/11\/14\/the-skiplast-extension-method.aspx\" target=\"_blank\" rel=\"noopener\">The SkipLast Extension Method<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/11\/24\/fp-tutorial-vb.aspx\" target=\"_blank\" rel=\"noopener\">Query Composition using Functional Programming Techniques in VB 9.0<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2009\/01\/28\/equality-semantics-of-linq-to-xml-trees.aspx\" target=\"_blank\" rel=\"noopener\">Equality Semantics of LINQ to XML Trees<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2009\/01\/28\/manually-cloning-linq-to-xml-trees.aspx\" target=\"_blank\" rel=\"noopener\">Manually Cloning LINQ to XML Trees<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2009\/02\/18\/the-composability-thought-process-for-linq.aspx\" target=\"_blank\" rel=\"noopener\">The Composability Thought Process for LINQ<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2009\/02\/20\/ease-of-maintenance-of-linq-code.aspx\" target=\"_blank\" rel=\"noopener\">Ease of Maintenance of LINQ Code<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2009\/02\/21\/computing-deep-hash-codes-using-linq-to-xml.aspx\" target=\"_blank\" rel=\"noopener\">Computing Deep Hash Codes using LINQ to XML<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2009\/02\/22\/ease-of-maintenance-of-linq-code-2.aspx\" target=\"_blank\" rel=\"noopener\">Ease of Maintenance of LINQ Code (2)<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2009\/04\/08\/why-i-don-t-use-the-foreach-extension-method.aspx\" target=\"_blank\" rel=\"noopener\">Why I Don&#8217;t Use the ForEach Extension Method<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2009\/07\/20\/a-tutorial-in-the-recursive-approach-to-pure-functional-transformations-of-xml.aspx\" target=\"_blank\" rel=\"noopener\">Recursive Approach to Pure Functional Transformations of XML<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2009\/12\/13\/implementing-inheritance-in-xml.aspx\" target=\"_blank\" rel=\"noopener\">Implementing &#8216;Inheritance&#8217; in XML<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2010\/02\/15\/rollup-extension-method-create-running-totals-using-linq-to-objects.aspx\" target=\"_blank\" rel=\"noopener\">Rollup Extension Method: Create Running Totals using LINQ to Objects<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2010\/03\/10\/ad-hoc-string-concatenation-using-linq.aspx\" target=\"_blank\" rel=\"noopener\">Ad-Hoc String Concatenation using LINQ<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2010\/03\/12\/hex-dump-using-linq-in-7-lines-of-code.aspx\" target=\"_blank\" rel=\"noopener\">Hex Dump using LINQ (in 7 Lines of Code)<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2010\/06\/29\/writing-a-recursive-descent-parser-using-c-and-linq.aspx\" target=\"_blank\" rel=\"noopener\">Writing a Recursive Descent Parser using C# and LINQ<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2010\/07\/06\/recursive-descent-parser-using-linq-the-augmented-backus-naur-form-grammar.aspx\" target=\"_blank\" rel=\"noopener\">Recursive Descent Parser using LINQ: The Augmented Backus-Naur Form Grammar<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2010\/07\/13\/recursive-descent-parser-a-simple-grammar.aspx\" target=\"_blank\" rel=\"noopener\">Recursive Descent Parser: A Simple Grammar<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2010\/07\/15\/creating-a-collection-from-singletons-and-collections-using-linq.aspx\" target=\"_blank\" rel=\"noopener\">Creating a Collection from Singletons and Collections using LINQ<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem broken_link\" href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2010\/07\/30\/building-a-simple-recursive-descent-parser.aspx\" target=\"_blank\" rel=\"noopener\">Building a Simple Recursive Descent Parser<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem\" href=\"https:\/\/www.ericwhite.com\/blog\/screen-cast-functional-programming-utility-methods-and-classes-for-open-xml\/\" target=\"_blank\" rel=\"noopener\">Screen-Cast: Functional Programming Utility Methods and Classes for Open XML<\/a><\/li>\n<li class=\"ericListItem\"><a class=\"ericListItem\" href=\"https:\/\/www.ericwhite.com\/blog\/open-xml-specific-utility-methods-and-classes-in-powertools-for-open-xml\/\" target=\"_blank\" rel=\"noopener\">Open XML Specific Utility Methods and Classes in PowerTools for Open XML<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Back to TOCJust VideosExpanded TOC Language Integrated Query, when used properly, enables you to build powerful applications in the functional programming style. Pure functional transformations are my recommended approach to document manipulation. Query Composition using Functional Programming Techniques in C# 3.0 Performance of Chained Queries Atomized XName and XNamespace Objects Preatomization of XName Objects Statically [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"_s2mail":"","footnotes":""},"class_list":["post-665","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages\/665","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/comments?post=665"}],"version-history":[{"count":8,"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages\/665\/revisions"}],"predecessor-version":[{"id":8005,"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages\/665\/revisions\/8005"}],"wp:attachment":[{"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/media?parent=665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}