SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
______                _   _                   _
| ____|               | | (_)                 | |
| |__ _   _ _ __   ___| |_ _ ___ _ __     __ _| |
| __| | | | '_  / __| __| |/ _ | '_  / _` | |
| | | |_| | | | | (__| |_| | (_) | | | | (_| | |
|_|   __,_|_| |_|___|__|_|___/|_| |_|__,_|_|


 _____                                               _
| __                                               (_)
| |__) | __ ___   __ _ _ __ __ _ _ __ ___ _ __ ___ _ _ __     __ _
| ___/ '__/ _  / _` | '__/ _` | '_ ` _ | '_ ` _ | | '_  / _` |
| |   | | | (_) | (_| | | | (_| | | | | | | | | | | | | | | | (_| |
|_|   |_| ___/ __, |_| __,_|_| |_| |_|_| |_| |_|_|_| |_|__, |
                  __/ |                                       __/ |
                 |___/                                       |___/
           ____   __   __      __     __ __      ____    __   _ _    __ ____   __   ____   __    __ _
         (  _  / _ ( )     / _ _( )( )      (      / _ ( / ) / (      / _ ( _  / _ ( ( 
          ) _ (/     / (_//     / )  )(    ) D (/      / / ( O )) D (/     )   //    /     /
         (____/_/_/____/_/_/____/(__)    (____/_/_/_)(_/ __/(____/_/_/(___)_/_/_)__)
http://eli.thegreenplace.net/wp-content/uploads/2008/05/tc_000.png
http://sites.google.com/site/andrewsporfotilio/_/rsrc/1226818616654/Home/math_400.jpg
Functional Programming is a style whose
underlying model of computation is the
function.




          f(x)
Referential Transparency
     Higher Order functions
     Lazy Evaluation
     Pattern Matching




http://picasaweb.google.com/damodaran.balaji/DevCampChennaiJuly2010#5493004664487949618
Lambda Calculus
Continuations
Monads
Type Inference
Referential Transparency
Higher Order functions
Lazy Evaluation
Pattern Matching
Referential Transparency
             “Equals can be replaced
                  with equals”




http://2.bp.blogspot.com/_DS3VD3b2euI/TRIcIUzduDI/AAAAAAAAAGA/Xp2E6kPxZCc/s1600/Pascal+the+chameleon+from+tangled+rapunzel+disney+cartoon.jpg
Referential Transparency
“Equals can be replaced with equals”


        f(x) = g(x) + 5
        h(x) = x * f(x)
Referential Transparency
“Equals can be replaced with equals”


        f(x) = g(x) + 5
        h(x) = x * f(x)

        h(x) = x * (g(x) + 5)
public class ReferentiallyOpaque {
    private int x = 0;

    static int f(int y) {
        return x += y;
    }

    public static void main(String[] args) {
        ReferentiallyOpaque ro = new ReferentiallyOpaque();
        System.out.println(ro.f(5));
        System.out.println(ro.f(5));
    }
}
public class ReferentiallyOpaque {
    private int x = 0;;

    static int f(int y) {
        return x += y;
    }

    public static void main(String[] args) {
        ReferentiallyOpaque ro = new ReferentiallyOpaque();
        System.out.println(ro.f(5));
        System.out.println(ro.f(5));
    }
}


                            5
                            10
public class Example {
    public static void main(String[] args) {

        StringBuffer buffer = new StringBuffer("Hello World");
        System.out.println(buffer.reverse());
        System.out.println(buffer.reverse());
    }
}
public class Example {
    public static void main(String[] args) {

        StringBuffer buffer = new StringBuffer("Hello World");
        System.out.println(buffer.reverse());
        System.out.println(buffer.reverse());
    }
}


                       dlroW olleH
                       Hello World
public class Example {
    public static void main(String[] args) {

        StringBuffer buffer = new StringBuffer("Hello World");
        StringBuffer s1 = buffer.reverse();
        StringBuffer s2 = buffer.reverse();
        System.out.println(s1 + " " + s2);
    }
}
public class Example {
    public static void main(String[] args) {

        StringBuffer buffer = new StringBuffer("Hello World");
        StringBuffer s1 = buffer.reverse();
        StringBuffer s2 = buffer.reverse();
        System.out.println(s1 + " " + s2);
    }
}


              Hello World Hello World
Varying Variables
Global State
•    Looping
                                                             •    File I/O
                                                             •    Modify Data
                                                             •    Do more than one thing?




http://paulafanclub.com/wp-content/uploads/2010/12/confused.jpg
Looping



static int factorial(int number) {
   int f = 1;
   for (int i = number; i > 0; i--)
       f = f * i;
   return f;
}
Looping
                                                              Recursion
               static int factorial(int number) {
                  int f = 1;
                  for (int i = number; i > 0; i--)
                      f = f * i;
                  return f;
               }
                                                          static int factorial(int number) {
                                                              return (number == 1) ?
                                                                number :
                                                                number * factorial(number - 1);
                                                          }




http://www.shrink4men.com/wp-content/uploads/2010/11/dog-chasing-its-tail.jpg
Modifying data



static List<Integer> addToList(List<Integer> integers, int a) {
   integers.add(a);
   return integers;
}




                Mutable data structures
Modifying data
                                    Immutable
static List<Integer> addToList(List<Integer> integers, int a) {
   integers.add(a);
   return integers;
}


                    let addToList list a =
                        list @ [a]

                    > let g = [1;2;3;];;
                    val g : int list = [1; 2; 3]

                    > addToList g 4;;
                    val it : int list = [1; 2; 3; 4]

                    > g;;
                    val it : int list = [1; 2; 3]
                    >




            http://4.bp.blogspot.com/_RpRScqAI8e4/SbNPgumsqPI/AAAAAAAAAK4/ZK8ZsfKJCmQ/s400/wolverine+hugh+jackman.jpg
Referential Transparency
Higher Order functions
Lazy Evaluation
Pattern Matching
Higher Order functions
“Functions as first class values”




                    http://www.dreamstime.com/looking-up-to-the-sky-thumb4655038.jpg
Higher Order functions
“Functions that can be passed as arguments”



     def square(x):
         return x * x

     def add(function, x):
         return function(x) + function(x)

     print add(square, 5)
Higher Order functions
“Functions that can be returned as results”

     function addNumber(x) {
         return function(y) {
             return x + y
         }
     }

     var add4With = addNumber(4)
     var add5With = addNumber(5)

     add4with(8)
     add5with(8)

     12
     13
Higher Order functions
           “Functions that can be returned as results”

                   function addNumber(x) {
Lambda Functions
                       return function(y) {
                           return x + y
                       }
                   }

                   var add4With = addNumber(4)
                   var add5With = addNumber(5)

                   add4with(8)
                   add5with(8)

                   12
                   13
Higher Order functions
           “Functions that can be returned as results”

                   function addNumber(x) {
Lambda Functions
                       return function(y) {
                           return x + y
                       }
                   }

                   var add4With = addNumber(4)
                   var add5With = addNumber(5)

                   add4with(8)
                                                 Functions stored in
                   add5with(8)
                                                   data structures
                   12
                   13
Higher Order functions
           “Currying”
let add x y =
    x + y

val add : int -> int -> int

> let add5 = add 5;;
val add5 : (int -> int)

> add5 4;;
val it : int = 9
>
Referential Transparency
Higher Order functions
Lazy Evaluation
Pattern Matching
Lazy Evaluation
“Arguments in a function call are evaluated at most once.”




       http://www.arngren.dk/image/Wallpaper/Comic/Calvin%20Hobbes/Sleeping1024.jpg
Lazy Evaluation
“Ability to invoke expressions only when its value is needed.”
   static void Main(string[] args)
   {
       var lazy = new Lazy<int>(() =>
       {
           Console.WriteLine("calculating...");
           return 6 * 7;
       });
       Console.WriteLine(lazy.Value);
       Console.WriteLine(lazy.Value);
   }
Lazy Evaluation
“Ability to invoke expressions only when its value is needed.”
   static void Main(string[] args)
   {
       var lazy = new Lazy<int>(() =>
       {
           Console.WriteLine("calculating...");
           return 6 * 7;
       });
       Console.WriteLine(lazy.Value);
       Console.WriteLine(lazy.Value);
   }


                      calculating...
                      42
                      42
Lazy Evaluation
                         “Memoization”
function Lazy_Memoized(def) {
  var cache = [];

    return function(i) {
      return (i in cache) ? cache[i] :
        (cache[i] = def.call(arguments.callee, i));
    };
}

var factorial = new Lazy_Memoized(function(i) {
  return i <= 1 ? i : i * this(i - 1);
});

factorial(6)
Lazy Evaluation
         “Ability to create infinite sequence in data structures”




http://softwarezku.co.cc/wp-content/uploads/2010/09/Visual-Studio-2010-Logo.png
Referential Transparency
Higher Order functions
Lazy Evaluation
Pattern Matching
Pattern Matching
      “Writing several equations defining the same function”




http://softwareandfinance.com/images/vcpp-trig1.jpg
Pattern Matching
A typical function definition


f(x) = 1, when x = 0
      = 3x + ex, when x > 0
Pattern Matching
A typical function definition

 fac :: Integer -> Integer
 fac 0 = 1
 fac n | n > 0 = n * fac(n-1)




let rec factorial = function
    | 0 -> 1
    | n -> n * factorial(n - 1)
References
•   Concepts, Evolution and Application of Functional Programming Languages – Paul
    Hudak
•   http://msdn.microsoft.com/en-us/library/dd547125.aspx - Pattern Matching in
    F#
•   http://appden.com/javascript/lazy-list-comprehensions-in-javascript-a-lazy-
    evalution/
•   http://images.google.com
•   http://en.wikipedia.org
•   http://www.haskell.org/haskellwiki/Haskell
•   http://homepages.inf.ed.ac.uk/wadler/

Más contenido relacionado

La actualidad más candente

Python 2.5 reference card (2009)
Python 2.5 reference card (2009)Python 2.5 reference card (2009)
Python 2.5 reference card (2009)gekiaruj
 
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей КоваленкоFwdays
 
Atomically { Delete Your Actors }
Atomically { Delete Your Actors }Atomically { Delete Your Actors }
Atomically { Delete Your Actors }John De Goes
 
Martin Fowler's Refactoring Techniques Quick Reference
Martin Fowler's Refactoring Techniques Quick ReferenceMartin Fowler's Refactoring Techniques Quick Reference
Martin Fowler's Refactoring Techniques Quick ReferenceSeung-Bum Lee
 
Profiling and optimization
Profiling and optimizationProfiling and optimization
Profiling and optimizationg3_nittala
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional ProgrammingDmitry Buzdin
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
Java 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forwardJava 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forwardMario Fusco
 
Hive function-cheat-sheet
Hive function-cheat-sheetHive function-cheat-sheet
Hive function-cheat-sheetDr. Volkan OBAN
 
Oh, All the things you'll traverse
Oh, All the things you'll traverseOh, All the things you'll traverse
Oh, All the things you'll traverseLuka Jacobowitz
 
Scala Functional Patterns
Scala Functional PatternsScala Functional Patterns
Scala Functional Patternsleague
 
R Programming: Learn To Manipulate Strings In R
R Programming: Learn To Manipulate Strings In RR Programming: Learn To Manipulate Strings In R
R Programming: Learn To Manipulate Strings In RRsquared Academy
 
One Monad to Rule Them All
One Monad to Rule Them AllOne Monad to Rule Them All
One Monad to Rule Them AllJohn De Goes
 
Python For Data Science Cheat Sheet
Python For Data Science Cheat SheetPython For Data Science Cheat Sheet
Python For Data Science Cheat SheetKarlijn Willems
 
6. Generics. Collections. Streams
6. Generics. Collections. Streams6. Generics. Collections. Streams
6. Generics. Collections. StreamsDEVTYPE
 
Functional Programming In Java
Functional Programming In JavaFunctional Programming In Java
Functional Programming In JavaAndrei Solntsev
 
Monoids, monoids, monoids
Monoids, monoids, monoidsMonoids, monoids, monoids
Monoids, monoids, monoidsLuka Jacobowitz
 

La actualidad más candente (20)

Python 2.5 reference card (2009)
Python 2.5 reference card (2009)Python 2.5 reference card (2009)
Python 2.5 reference card (2009)
 
A tour of Python
A tour of PythonA tour of Python
A tour of Python
 
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
 
Atomically { Delete Your Actors }
Atomically { Delete Your Actors }Atomically { Delete Your Actors }
Atomically { Delete Your Actors }
 
Martin Fowler's Refactoring Techniques Quick Reference
Martin Fowler's Refactoring Techniques Quick ReferenceMartin Fowler's Refactoring Techniques Quick Reference
Martin Fowler's Refactoring Techniques Quick Reference
 
Profiling and optimization
Profiling and optimizationProfiling and optimization
Profiling and optimization
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional Programming
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Java 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forwardJava 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forward
 
Hive function-cheat-sheet
Hive function-cheat-sheetHive function-cheat-sheet
Hive function-cheat-sheet
 
Oh, All the things you'll traverse
Oh, All the things you'll traverseOh, All the things you'll traverse
Oh, All the things you'll traverse
 
Scala Functional Patterns
Scala Functional PatternsScala Functional Patterns
Scala Functional Patterns
 
R Programming: Learn To Manipulate Strings In R
R Programming: Learn To Manipulate Strings In RR Programming: Learn To Manipulate Strings In R
R Programming: Learn To Manipulate Strings In R
 
Haskell 101
Haskell 101Haskell 101
Haskell 101
 
One Monad to Rule Them All
One Monad to Rule Them AllOne Monad to Rule Them All
One Monad to Rule Them All
 
Python For Data Science Cheat Sheet
Python For Data Science Cheat SheetPython For Data Science Cheat Sheet
Python For Data Science Cheat Sheet
 
6. Generics. Collections. Streams
6. Generics. Collections. Streams6. Generics. Collections. Streams
6. Generics. Collections. Streams
 
Fp java8
Fp java8Fp java8
Fp java8
 
Functional Programming In Java
Functional Programming In JavaFunctional Programming In Java
Functional Programming In Java
 
Monoids, monoids, monoids
Monoids, monoids, monoidsMonoids, monoids, monoids
Monoids, monoids, monoids
 

Similar a Functional programming basics

Is java8a truefunctionallanguage
Is java8a truefunctionallanguageIs java8a truefunctionallanguage
Is java8a truefunctionallanguageSamir Chekkal
 
Is java8 a true functional programming language
Is java8 a true functional programming languageIs java8 a true functional programming language
Is java8 a true functional programming languageSQLI
 
Thinking in Functions: Functional Programming in Python
Thinking in Functions: Functional Programming in PythonThinking in Functions: Functional Programming in Python
Thinking in Functions: Functional Programming in PythonAnoop Thomas Mathew
 
Python 101 language features and functional programming
Python 101 language features and functional programmingPython 101 language features and functional programming
Python 101 language features and functional programmingLukasz Dynowski
 
FunctionalJS - George Shevtsov
FunctionalJS - George ShevtsovFunctionalJS - George Shevtsov
FunctionalJS - George ShevtsovGeorgiy Shevtsov
 
1. George Shevtsov - Functional JavaScript
1. George Shevtsov - Functional JavaScript1. George Shevtsov - Functional JavaScript
1. George Shevtsov - Functional JavaScriptInnovecs
 
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기Swift 함수 커링 사용하기
Swift 함수 커링 사용하기진성 오
 
7 Habits For a More Functional Swift
7 Habits For a More Functional Swift7 Habits For a More Functional Swift
7 Habits For a More Functional SwiftJason Larsen
 
SeaJUG March 2004 - Groovy
SeaJUG March 2004 - GroovySeaJUG March 2004 - Groovy
SeaJUG March 2004 - GroovyTed Leung
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript IntroductionDmitry Sheiko
 
ITT 2015 - Saul Mora - Object Oriented Function Programming
ITT 2015 - Saul Mora - Object Oriented Function ProgrammingITT 2015 - Saul Mora - Object Oriented Function Programming
ITT 2015 - Saul Mora - Object Oriented Function ProgrammingIstanbul Tech Talks
 
FP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyondFP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyondMario Fusco
 
TI1220 Lecture 6: First-class Functions
TI1220 Lecture 6: First-class FunctionsTI1220 Lecture 6: First-class Functions
TI1220 Lecture 6: First-class FunctionsEelco Visser
 
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6Dmitry Soshnikov
 
Thinking Functionally with JavaScript
Thinking Functionally with JavaScriptThinking Functionally with JavaScript
Thinking Functionally with JavaScriptLuis Atencio
 
Functional Programming for OO Programmers (part 2)
Functional Programming for OO Programmers (part 2)Functional Programming for OO Programmers (part 2)
Functional Programming for OO Programmers (part 2)Calvin Cheng
 
TDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação FuncionalTDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação Funcionaltdc-globalcode
 
EcmaScript unchained
EcmaScript unchainedEcmaScript unchained
EcmaScript unchainedEduard Tomàs
 

Similar a Functional programming basics (20)

Is java8a truefunctionallanguage
Is java8a truefunctionallanguageIs java8a truefunctionallanguage
Is java8a truefunctionallanguage
 
Is java8 a true functional programming language
Is java8 a true functional programming languageIs java8 a true functional programming language
Is java8 a true functional programming language
 
Thinking in Functions: Functional Programming in Python
Thinking in Functions: Functional Programming in PythonThinking in Functions: Functional Programming in Python
Thinking in Functions: Functional Programming in Python
 
Python 101 language features and functional programming
Python 101 language features and functional programmingPython 101 language features and functional programming
Python 101 language features and functional programming
 
FunctionalJS - George Shevtsov
FunctionalJS - George ShevtsovFunctionalJS - George Shevtsov
FunctionalJS - George Shevtsov
 
1. George Shevtsov - Functional JavaScript
1. George Shevtsov - Functional JavaScript1. George Shevtsov - Functional JavaScript
1. George Shevtsov - Functional JavaScript
 
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
 
7 Habits For a More Functional Swift
7 Habits For a More Functional Swift7 Habits For a More Functional Swift
7 Habits For a More Functional Swift
 
SeaJUG March 2004 - Groovy
SeaJUG March 2004 - GroovySeaJUG March 2004 - Groovy
SeaJUG March 2004 - Groovy
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript Introduction
 
25-functions.ppt
25-functions.ppt25-functions.ppt
25-functions.ppt
 
Javascript
JavascriptJavascript
Javascript
 
ITT 2015 - Saul Mora - Object Oriented Function Programming
ITT 2015 - Saul Mora - Object Oriented Function ProgrammingITT 2015 - Saul Mora - Object Oriented Function Programming
ITT 2015 - Saul Mora - Object Oriented Function Programming
 
FP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyondFP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyond
 
TI1220 Lecture 6: First-class Functions
TI1220 Lecture 6: First-class FunctionsTI1220 Lecture 6: First-class Functions
TI1220 Lecture 6: First-class Functions
 
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
 
Thinking Functionally with JavaScript
Thinking Functionally with JavaScriptThinking Functionally with JavaScript
Thinking Functionally with JavaScript
 
Functional Programming for OO Programmers (part 2)
Functional Programming for OO Programmers (part 2)Functional Programming for OO Programmers (part 2)
Functional Programming for OO Programmers (part 2)
 
TDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação FuncionalTDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação Funcional
 
EcmaScript unchained
EcmaScript unchainedEcmaScript unchained
EcmaScript unchained
 

Último

Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 

Último (20)

Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 

Functional programming basics

  • 1. ______ _ _ _ | ____| | | (_) | | | |__ _ _ _ __ ___| |_ _ ___ _ __ __ _| | | __| | | | '_ / __| __| |/ _ | '_ / _` | | | | | |_| | | | | (__| |_| | (_) | | | | (_| | | |_| __,_|_| |_|___|__|_|___/|_| |_|__,_|_| _____ _ | __ (_) | |__) | __ ___ __ _ _ __ __ _ _ __ ___ _ __ ___ _ _ __ __ _ | ___/ '__/ _ / _` | '__/ _` | '_ ` _ | '_ ` _ | | '_ / _` | | | | | | (_) | (_| | | | (_| | | | | | | | | | | | | | | | (_| | |_| |_| ___/ __, |_| __,_|_| |_| |_|_| |_| |_|_|_| |_|__, | __/ | __/ | |___/ |___/ ____ __ __ __ __ __ ____ __ _ _ __ ____ __ ____ __ __ _ ( _ / _ ( ) / _ _( )( ) ( / _ ( / ) / ( / _ ( _ / _ ( ( ) _ (/ / (_// / ) )( ) D (/ / / ( O )) D (/ ) // / / (____/_/_/____/_/_/____/(__) (____/_/_/_)(_/ __/(____/_/_/(___)_/_/_)__)
  • 4. Functional Programming is a style whose underlying model of computation is the function. f(x)
  • 5. Referential Transparency Higher Order functions Lazy Evaluation Pattern Matching http://picasaweb.google.com/damodaran.balaji/DevCampChennaiJuly2010#5493004664487949618
  • 7. Referential Transparency Higher Order functions Lazy Evaluation Pattern Matching
  • 8. Referential Transparency “Equals can be replaced with equals” http://2.bp.blogspot.com/_DS3VD3b2euI/TRIcIUzduDI/AAAAAAAAAGA/Xp2E6kPxZCc/s1600/Pascal+the+chameleon+from+tangled+rapunzel+disney+cartoon.jpg
  • 9. Referential Transparency “Equals can be replaced with equals” f(x) = g(x) + 5 h(x) = x * f(x)
  • 10. Referential Transparency “Equals can be replaced with equals” f(x) = g(x) + 5 h(x) = x * f(x) h(x) = x * (g(x) + 5)
  • 11. public class ReferentiallyOpaque { private int x = 0; static int f(int y) { return x += y; } public static void main(String[] args) { ReferentiallyOpaque ro = new ReferentiallyOpaque(); System.out.println(ro.f(5)); System.out.println(ro.f(5)); } }
  • 12. public class ReferentiallyOpaque { private int x = 0;; static int f(int y) { return x += y; } public static void main(String[] args) { ReferentiallyOpaque ro = new ReferentiallyOpaque(); System.out.println(ro.f(5)); System.out.println(ro.f(5)); } } 5 10
  • 13. public class Example { public static void main(String[] args) { StringBuffer buffer = new StringBuffer("Hello World"); System.out.println(buffer.reverse()); System.out.println(buffer.reverse()); } }
  • 14. public class Example { public static void main(String[] args) { StringBuffer buffer = new StringBuffer("Hello World"); System.out.println(buffer.reverse()); System.out.println(buffer.reverse()); } } dlroW olleH Hello World
  • 15. public class Example { public static void main(String[] args) { StringBuffer buffer = new StringBuffer("Hello World"); StringBuffer s1 = buffer.reverse(); StringBuffer s2 = buffer.reverse(); System.out.println(s1 + " " + s2); } }
  • 16. public class Example { public static void main(String[] args) { StringBuffer buffer = new StringBuffer("Hello World"); StringBuffer s1 = buffer.reverse(); StringBuffer s2 = buffer.reverse(); System.out.println(s1 + " " + s2); } } Hello World Hello World
  • 18. Looping • File I/O • Modify Data • Do more than one thing? http://paulafanclub.com/wp-content/uploads/2010/12/confused.jpg
  • 19. Looping static int factorial(int number) { int f = 1; for (int i = number; i > 0; i--) f = f * i; return f; }
  • 20. Looping Recursion static int factorial(int number) { int f = 1; for (int i = number; i > 0; i--) f = f * i; return f; } static int factorial(int number) { return (number == 1) ? number : number * factorial(number - 1); } http://www.shrink4men.com/wp-content/uploads/2010/11/dog-chasing-its-tail.jpg
  • 21. Modifying data static List<Integer> addToList(List<Integer> integers, int a) { integers.add(a); return integers; } Mutable data structures
  • 22. Modifying data Immutable static List<Integer> addToList(List<Integer> integers, int a) { integers.add(a); return integers; } let addToList list a = list @ [a] > let g = [1;2;3;];; val g : int list = [1; 2; 3] > addToList g 4;; val it : int list = [1; 2; 3; 4] > g;; val it : int list = [1; 2; 3] > http://4.bp.blogspot.com/_RpRScqAI8e4/SbNPgumsqPI/AAAAAAAAAK4/ZK8ZsfKJCmQ/s400/wolverine+hugh+jackman.jpg
  • 23. Referential Transparency Higher Order functions Lazy Evaluation Pattern Matching
  • 24. Higher Order functions “Functions as first class values” http://www.dreamstime.com/looking-up-to-the-sky-thumb4655038.jpg
  • 25. Higher Order functions “Functions that can be passed as arguments” def square(x): return x * x def add(function, x): return function(x) + function(x) print add(square, 5)
  • 26. Higher Order functions “Functions that can be returned as results” function addNumber(x) { return function(y) { return x + y } } var add4With = addNumber(4) var add5With = addNumber(5) add4with(8) add5with(8) 12 13
  • 27. Higher Order functions “Functions that can be returned as results” function addNumber(x) { Lambda Functions return function(y) { return x + y } } var add4With = addNumber(4) var add5With = addNumber(5) add4with(8) add5with(8) 12 13
  • 28. Higher Order functions “Functions that can be returned as results” function addNumber(x) { Lambda Functions return function(y) { return x + y } } var add4With = addNumber(4) var add5With = addNumber(5) add4with(8) Functions stored in add5with(8) data structures 12 13
  • 29. Higher Order functions “Currying” let add x y = x + y val add : int -> int -> int > let add5 = add 5;; val add5 : (int -> int) > add5 4;; val it : int = 9 >
  • 30. Referential Transparency Higher Order functions Lazy Evaluation Pattern Matching
  • 31. Lazy Evaluation “Arguments in a function call are evaluated at most once.” http://www.arngren.dk/image/Wallpaper/Comic/Calvin%20Hobbes/Sleeping1024.jpg
  • 32. Lazy Evaluation “Ability to invoke expressions only when its value is needed.” static void Main(string[] args) { var lazy = new Lazy<int>(() => { Console.WriteLine("calculating..."); return 6 * 7; }); Console.WriteLine(lazy.Value); Console.WriteLine(lazy.Value); }
  • 33. Lazy Evaluation “Ability to invoke expressions only when its value is needed.” static void Main(string[] args) { var lazy = new Lazy<int>(() => { Console.WriteLine("calculating..."); return 6 * 7; }); Console.WriteLine(lazy.Value); Console.WriteLine(lazy.Value); } calculating... 42 42
  • 34. Lazy Evaluation “Memoization” function Lazy_Memoized(def) { var cache = []; return function(i) { return (i in cache) ? cache[i] : (cache[i] = def.call(arguments.callee, i)); }; } var factorial = new Lazy_Memoized(function(i) { return i <= 1 ? i : i * this(i - 1); }); factorial(6)
  • 35. Lazy Evaluation “Ability to create infinite sequence in data structures” http://softwarezku.co.cc/wp-content/uploads/2010/09/Visual-Studio-2010-Logo.png
  • 36. Referential Transparency Higher Order functions Lazy Evaluation Pattern Matching
  • 37. Pattern Matching “Writing several equations defining the same function” http://softwareandfinance.com/images/vcpp-trig1.jpg
  • 38. Pattern Matching A typical function definition f(x) = 1, when x = 0 = 3x + ex, when x > 0
  • 39. Pattern Matching A typical function definition fac :: Integer -> Integer fac 0 = 1 fac n | n > 0 = n * fac(n-1) let rec factorial = function | 0 -> 1 | n -> n * factorial(n - 1)
  • 40.
  • 41.
  • 42. References • Concepts, Evolution and Application of Functional Programming Languages – Paul Hudak • http://msdn.microsoft.com/en-us/library/dd547125.aspx - Pattern Matching in F# • http://appden.com/javascript/lazy-list-comprehensions-in-javascript-a-lazy- evalution/ • http://images.google.com • http://en.wikipedia.org • http://www.haskell.org/haskellwiki/Haskell • http://homepages.inf.ed.ac.uk/wadler/