SlideShare ist ein Scribd-Unternehmen logo
1 von 56
Downloaden Sie, um offline zu lesen
Functional thinking in coffee script
FIRST, A QUICK POLL
FIRST, A QUICK POLL

 FUNCTIONAL PROGRAMMING EXPERIENCE?
                (THE 80’S COUNTS)
FIRST, A QUICK POLL

 FUNCTIONAL PROGRAMMING EXPERIENCE?
                 (THE 80’S COUNTS)




        COFFEESCRIPT EXPERIENCE?
             (NOBODY LIKES A SHOW OFF)
AN OVER-SIMPLIFIED COMPARISON...
AN OVER-SIMPLIFIED COMPARISON...
     FUNCTIONAL
      LANGUAGES

-  NO SIDE EFFECTS
   DUE TO LEXICAL
   SCOPING
-  IMMUTABLE OBJECTS
-  MONADIC FUNCTIONS
   (1-ARITY)
-  ITERATION THROUGH
   RECURSION
AN OVER-SIMPLIFIED COMPARISON…
     FUNCTIONAL             JAVASCRIPT /
      LANGUAGES             COFFEESCRIPT

-  NO SIDE EFFECTS     -  SIDE EFFECTS IF YOU
   DUE TO LEXICAL         WANT THEM, UGH!
   SCOPING             -  VERY FEW
-  IMMUTABLE OBJECTS      IMMUTABLE OBJECTS
-  MONADIC FUNCTIONS   -  N-ARITY, VARIADIC
   (1-ARITY)              FUNCTIONS
-  ITERATION THROUGH   -  ITERATION TYPICALLY
   RECURSION              THROUGH CURSORS
A GROSSLY OVER-SIMPLIFIED COMPARISON…
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES
        (HOW)
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES
        (HOW)

-  USING FREE HAND,
   PICK UP PORK
   SANDWICH
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES
        (HOW)

-  USING FREE HAND,
   PICK UP PORK
   SANDWICH
-  RAISE HAND TO
   MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES
        (HOW)

-  USING FREE HAND,
   PICK UP PORK
   SANDWICH
-  RAISE HAND TO
   MOUTH
-  OPEN MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES
        (HOW)

-  USING FREE HAND,
   PICK UP PORK
   SANDWICH
-  RAISE HAND TO
   MOUTH
-  OPEN MOUTH
-  PLACE PORK
   SANDWICH IN MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES
         (HOW)

-  USING FREE HAND, PICK
   UP PORK SANDWICH
-  RAISE HAND TO MOUTH
-  OPEN MOUTH
-  PLACE PORK SANDWICH
   IN MOUTH
-  RELEASE PORK
   SANDWICH
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES
         (HOW)

-  USING FREE HAND, PICK
   UP PORK SANDWICH
-  RAISE HAND TO MOUTH
-  OPEN MOUTH
-  PLACE PORK SANDWICH
   IN MOUTH
-  RELEASE PORK
   SANDWICH
-  REMOVE HAND FROM
   MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES
            (HOW)

-    USING FREE HAND, PICK UP
     PORK SANDWICH
-    RAISE HAND TO MOUTH
-    OPEN MOUTH
-    PLACE PORK SANDWICH IN
     MOUTH
-    RELEASE PORK SANDWICH
-    REMOVE HAND FROM
     MOUTH
-    CLOSE MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES
            (HOW)

-    USING FREE HAND, PICK UP
     PORK SANDWICH
-    RAISE HAND TO MOUTH
-    OPEN MOUTH
-    PLACE PORK SANDWICH IN
     MOUTH
-    RELEASE PORK SANDWICH
-    REMOVE HAND FROM
     MOUTH
-    CLOSE MOUTH
-    OPEN MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES
             (HOW)

-    USING FREE HAND, PICK UP
     PORK SANDWICH
-    RAISE HAND TO MOUTH
-    OPEN MOUTH
-    PLACE PORK SANDWICH IN
     MOUTH
-    RELEASE PORK SANDWICH
-    REMOVE HAND FROM MOUTH
-    CLOSE MOUTH
-    OPEN MOUTH
-    CLOSE MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES
              (HOW)
-    USING FREE HAND, PICK UP PORK
     SANDWICH
-    RAISE HAND TO MOUTH
-    OPEN MOUTH
-    PLACE PORK SANDWICH IN MOUTH
-    RELEASE PORK SANDWICH
-    REMOVE HAND FROM MOUTH
-    CLOSE MOUTH
-    OPEN MOUTH
-    CLOSE MOUTH
-    OPEN MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES
              (HOW)
-    USING FREE HAND, PICK UP PORK
     SANDWICH
-    RAISE HAND TO MOUTH
-    OPEN MOUTH
-    PLACE PORK SANDWICH IN MOUTH
-    RELEASE PORK SANDWICH
-    REMOVE HAND FROM MOUTH
-    CLOSE MOUTH
-    OPEN MOUTH
-    CLOSE MOUTH
-    OPEN MOUTH
-    CLOSE MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES
                  (HOW)
-    USING FREE HAND, PICK UP PORK
     SANDWICH
-    RAISE HAND TO MOUTH
-    OPEN MOUTH
-    PLACE PORK SANDWICH IN MOUTH
-    RELEASE PORK SANDWICH
-    REMOVE HAND FROM MOUTH
-    CLOSE MOUTH
-    OPEN MOUTH
-    CLOSE MOUTH
-    OPEN MOUTH
-    CLOSE MOUTH
-    SWALLOW
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES               DECLARATIVE LANGUAGES
                  (HOW)                     (WHAT)
-    USING FREE HAND, PICK UP PORK
     SANDWICH
-    RAISE HAND TO MOUTH
-    OPEN MOUTH
-    PLACE PORK SANDWICH IN MOUTH
-    RELEASE PORK SANDWICH
-    REMOVE HAND FROM MOUTH
-    CLOSE MOUTH
-    OPEN MOUTH
-    CLOSE MOUTH
-    OPEN MOUTH
-    CLOSE MOUTH
-    SWALLOW
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES               DECLARATIVE LANGUAGES
                  (HOW)                     (WHAT)
-    USING FREE HAND, PICK UP PORK
     SANDWICH                        -  EAT PORK SANDWICH
-    RAISE HAND TO MOUTH
-    OPEN MOUTH
-    PLACE PORK SANDWICH IN MOUTH
-    RELEASE PORK SANDWICH
-    REMOVE HAND FROM MOUTH
-    CLOSE MOUTH
-    OPEN MOUTH
-    CLOSE MOUTH
-    OPEN MOUTH
-    CLOSE MOUTH
-    SWALLOW
A GROSSLY OVER-SIMPLIFIED COMPARISON…
IMPERATIVELY LANGUAGES               DECLARATIVE LANGUAGES
                  (HOW)                      (WHAT)
-    USING FREE HAND, PICK UP PORK
     SANDWICH                        -  EAT PORK SANDWICH
-    RAISE HAND TO MOUTH
-    OPEN MOUTH
                                         (I SAID “GROSSLY”)
-    PLACE PORK SANDWICH IN MOUTH
-    RELEASE PORK SANDWICH
-    REMOVE HAND FROM MOUTH
-    CLOSE MOUTH
-    OPEN MOUTH
-    CLOSE MOUTH
-    OPEN MOUTH
-    CLOSE MOUTH
-    SWALLOW
…WHICH LEADS US TO A FEW CAVEATS
…WHICH LEADS US TO A FEW CAVEATS


        COFFEESCRIPT IS NOT PURELY FUNCTIONAL
…WHICH LEADS US TO A FEW CAVEATS


        COFFEESCRIPT IS NOT PURELY FUNCTIONAL



                WE DON’T REALLY CARE
…WHICH LEADS US TO A FEW CAVEATS


        COFFEESCRIPT IS NOT PURELY FUNCTIONAL



                WE DON’T REALLY CARE




              IT’S JUST JAVASCRIPT
WITH THAT, LET’S GET STARTED
      (WHY YOU’RE REALLY HERE)
PROBLEM 1†
IF WE LIST ALL THE NATURAL NUMBERS BELOW 10 THAT ARE MULTIPLES OF 3 OR 5,
             WE GET 3, 5, 6 AND 9. THE SUM OF THESE MULTIPLES IS 23.
        FIND THE SUM OF ALL THE MULTIPLES OF 3 OR 5 BELOW 1000.




                                                † HTTP://PROJECTEULER.NET/PROBLEM=1
PROBLEM 1†
IF WE LIST ALL THE NATURAL NUMBERS BELOW 10 THAT ARE MULTIPLES OF 3 OR 5,
             WE GET 3, 5, 6 AND 9. THE SUM OF THESE MULTIPLES IS 23.
        FIND THE SUM OF ALL THE MULTIPLES OF 3 OR 5 BELOW 1000.




                            (VOLUNTEERS?)




                                                † HTTP://PROJECTEULER.NET/PROBLEM=1
PROBLEM 1†
IF WE LIST ALL THE NATURAL NUMBERS BELOW 10 THAT ARE MULTIPLES OF 3 OR 5,
             WE GET 3, 5, 6 AND 9. THE SUM OF THESE MULTIPLES IS 23.
        FIND THE SUM OF ALL THE MULTIPLES OF 3 OR 5 BELOW 1000.




               FUNCTIONS WE’LL USE: FILTER, REDUCE




                                                † HTTP://PROJECTEULER.NET/PROBLEM=1
[1, 2, 3, 4].FILTER(FUNCTION(X){
      RETURN X % 2 == 0;
});
//-> [2, 4]


[‘THE’, ‘RAIN’, ‘IN’, ‘SPAIN’].FILTER(
      FUNCTION(WORD){
              RETURN WORD.LENGTH > 4;
      }
);
//-> [‘SPAIN’]
[2, 4, 6].REDUCE(FUNCTION(SUM, X){
      RETURN SUM + X;
});
//-> 12


[1, 2, 3].REDUCE(
      FUNCTION(STR, X){
            RETURN STR + ‘…‘ + X;
      }, ‘TESTING…TESTING’
);
//-> ‘TESTING…TESTING…1…2…3’
JAVASCRIPT




544 CHARACTERS
COFFEESCRIPT




248 CHARACTERS
PROBLEM 2†
     THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS IS,
                       1^2 + 2^2 + ... + 10^2 = 385
      THE SQUARE OF THE SUM OF THE FIRST TEN NATURAL NUMBERS IS,
                      (1 + 2 + ... + 10)^2 = 55^2 = 3025
 HENCE THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST TEN
    NATURAL NUMBERS AND THE SQUARE OF THE SUM IS 3025 - 385 = 2640.


 FIND THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST ONE
          HUNDRED NATURAL NUMBERS AND THE SQUARE OF THE SUM.




                                                 † HTTP://PROJECTEULER.NET/PROBLEM=6
PROBLEM 2†
     THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS IS,
                       1^2 + 2^2 + ... + 10^2 = 385
      THE SQUARE OF THE SUM OF THE FIRST TEN NATURAL NUMBERS IS,
                      (1 + 2 + ... + 10)^2 = 55^2 = 3025
 HENCE THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST TEN
    NATURAL NUMBERS AND THE SQUARE OF THE SUM IS 3025 - 385 = 2640.


 FIND THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST ONE
          HUNDRED NATURAL NUMBERS AND THE SQUARE OF THE SUM.


                          (VOLUNTEERS?)




                                                 † HTTP://PROJECTEULER.NET/PROBLEM=6
PROBLEM 2†
     THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS IS,
                       1^2 + 2^2 + ... + 10^2 = 385
      THE SQUARE OF THE SUM OF THE FIRST TEN NATURAL NUMBERS IS,
                      (1 + 2 + ... + 10)^2 = 55^2 = 3025
 HENCE THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST TEN
    NATURAL NUMBERS AND THE SQUARE OF THE SUM IS 3025 - 385 = 2640.


 FIND THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST ONE
          HUNDRED NATURAL NUMBERS AND THE SQUARE OF THE SUM.


               FUNCTIONS WE’LL USE: MAP, REDUCE




                                                 † HTTP://PROJECTEULER.NET/PROBLEM=6
[‘ALAN’, ‘BOB’, ‘FRANK’].MAP(FUNCTION(NAME){
      RETURN NAME.LENGTH;
});
//-> [4, 3, 5]


[1, 2, 3].MAP(FUNCTION(X){
      RETURN X * X;
});
//-> [1, 4, 9]
JAVASCRIPT




547 CHARACTERS
COFFEESCRIPT




263 CHARACTERS
PROBLEM 3†
A PALINDROMIC NUMBER READS THE SAME BOTH WAYS. THE LARGEST PALINDROME
       MADE FROM THE PRODUCT OF TWO 2-DIGIT NUMBERS IS 9009 = 91 X 99.


   FIND THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 3-DIGIT
                                NUMBERS.




                                              † HTTP://PROJECTEULER.NET/PROBLEM=4
PROBLEM 3†
A PALINDROMIC NUMBER READS THE SAME BOTH WAYS. THE LARGEST PALINDROME
       MADE FROM THE PRODUCT OF TWO 2-DIGIT NUMBERS IS 9009 = 91 X 99.


   FIND THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 3-DIGIT
                                NUMBERS.



                           (VOLUNTEERS?)




                                              † HTTP://PROJECTEULER.NET/PROBLEM=4
PROBLEM 3†
A PALINDROMIC NUMBER READS THE SAME BOTH WAYS. THE LARGEST PALINDROME
       MADE FROM THE PRODUCT OF TWO 2-DIGIT NUMBERS IS 9009 = 91 X 99.


   FIND THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 3-DIGIT
                                NUMBERS.



            FUNCTIONS WE’LL USE: MAP, FILTER, REDUCE




                                              † HTTP://PROJECTEULER.NET/PROBLEM=4
JAVASCRIPT




1,068 CHARACTERS
COFFEESCRIPT




462 CHARACTERS
OKAY JOHN, VERY GOOD.
  (ANYTHING USEFUL TODAY?)
REALISTIC PROBLEM
ASSUME WE HAVE A BUNCH OF DOCUMENTS, REPRESENTED AS STRINGS (YES, AN
                  ANEMIC DOMAIN. I SAID IT’D BE REALISTIC).
DESIGN A DOCUMENT DATABASE THAT TAKES A COLLECTION OF DOCUMENTS AND
                 RETURNS THE SIZE OF THE LARGEST ONE
REALISTIC PROBLEM
ASSUME WE HAVE A BUNCH OF DOCUMENTS, REPRESENTED AS STRINGS (YES, AN
                  ANEMIC DOMAIN. I SAID IT’D BE REALISTIC).
DESIGN A DOCUMENT DATABASE THAT TAKES A COLLECTION OF DOCUMENTS AND
                 RETURNS THE SIZE OF THE LARGEST ONE




                          (VOLUNTEERS?)
JAVASCRIPT




642 CHARACTERS
JAVASCRIPT




601 CHARACTERS
COFFEESCRIPT




546 CHARACTERS
COFFEESCRIPT




278 CHARACTERS
QUESTIONS BEFORE WE PAIR?
    (OR DURING, THAT’S COOL TOO)
PAIRING CHALLENGE
A COLLATZ SEQUENCE TAKES A NUMBER. IF THAT NUMBER IS EVEN, IT’S DIVIDED BY
      BY 2. IF IT’S ODD, IT’S MULTIPLIED BY 3 AND ADDED TO 1. THE RESULTING
    NUMBER IS THEN REAPPLIED TO THE COLLATZ FORMULA, UNTIL WE GET BACK
       THE NUMBER 1, AT WHICH POINT THE COLLATZ SEQUENCE TERMINATES.


    FOR ALL STARTING NUMBERS BETWEEN 1 AND 100, HOW MANY COLLATZ
                SEQUENCES HAVE A LENGTH GREATER THAN 15?

Weitere ähnliche Inhalte

Andere mochten auch

RadiciGroup for Sustainability Report - Key Elements 07 - RadiciGroup a Jeho ...
RadiciGroup for Sustainability Report - Key Elements 07 - RadiciGroup a Jeho ...RadiciGroup for Sustainability Report - Key Elements 07 - RadiciGroup a Jeho ...
RadiciGroup for Sustainability Report - Key Elements 07 - RadiciGroup a Jeho ...RadiciGroup
 
Music magazine research
Music magazine researchMusic magazine research
Music magazine researchbroganl4
 
Sumit gulia presentation
Sumit gulia presentationSumit gulia presentation
Sumit gulia presentationSumit Sam
 
Population Census Web Access System
Population Census Web Access SystemPopulation Census Web Access System
Population Census Web Access SystemPrognoz
 
Mezőgazdaság percrol percre
Mezőgazdaság percrol percreMezőgazdaság percrol percre
Mezőgazdaság percrol percreAgroinform.com
 
RadiciGroup for Sustainability Report - Key Elements 06 - Trvale Udržitelný P...
RadiciGroup for Sustainability Report - Key Elements 06 - Trvale Udržitelný P...RadiciGroup for Sustainability Report - Key Elements 06 - Trvale Udržitelný P...
RadiciGroup for Sustainability Report - Key Elements 06 - Trvale Udržitelný P...RadiciGroup
 
CV Harald Lechner October 2013
CV Harald Lechner October 2013CV Harald Lechner October 2013
CV Harald Lechner October 2013Dr. Harald Lechner
 
L’impronta ambientale. Riduzione dell’impatto ambientale realizzato con modif...
L’impronta ambientale. Riduzione dell’impatto ambientale realizzato con modif...L’impronta ambientale. Riduzione dell’impatto ambientale realizzato con modif...
L’impronta ambientale. Riduzione dell’impatto ambientale realizzato con modif...RadiciGroup
 
RadiciGroup at 6th European Nylon Symposium - 27-28 February 2012
RadiciGroup at 6th European Nylon Symposium - 27-28 February 2012 RadiciGroup at 6th European Nylon Symposium - 27-28 February 2012
RadiciGroup at 6th European Nylon Symposium - 27-28 February 2012 RadiciGroup
 

Andere mochten auch (17)

Albun de deportes
Albun de deportesAlbun de deportes
Albun de deportes
 
Marketing
MarketingMarketing
Marketing
 
RadiciGroup for Sustainability Report - Key Elements 07 - RadiciGroup a Jeho ...
RadiciGroup for Sustainability Report - Key Elements 07 - RadiciGroup a Jeho ...RadiciGroup for Sustainability Report - Key Elements 07 - RadiciGroup a Jeho ...
RadiciGroup for Sustainability Report - Key Elements 07 - RadiciGroup a Jeho ...
 
Music magazine research
Music magazine researchMusic magazine research
Music magazine research
 
Howw2
Howw2Howw2
Howw2
 
Sshi
SshiSshi
Sshi
 
Key criteria for shale oil
Key criteria for shale oilKey criteria for shale oil
Key criteria for shale oil
 
Sumit gulia presentation
Sumit gulia presentationSumit gulia presentation
Sumit gulia presentation
 
Personajes
PersonajesPersonajes
Personajes
 
บทสวด
บทสวดบทสวด
บทสวด
 
Population Census Web Access System
Population Census Web Access SystemPopulation Census Web Access System
Population Census Web Access System
 
Mezőgazdaság percrol percre
Mezőgazdaság percrol percreMezőgazdaság percrol percre
Mezőgazdaság percrol percre
 
RadiciGroup for Sustainability Report - Key Elements 06 - Trvale Udržitelný P...
RadiciGroup for Sustainability Report - Key Elements 06 - Trvale Udržitelný P...RadiciGroup for Sustainability Report - Key Elements 06 - Trvale Udržitelný P...
RadiciGroup for Sustainability Report - Key Elements 06 - Trvale Udržitelný P...
 
CV Harald Lechner October 2013
CV Harald Lechner October 2013CV Harald Lechner October 2013
CV Harald Lechner October 2013
 
L’impronta ambientale. Riduzione dell’impatto ambientale realizzato con modif...
L’impronta ambientale. Riduzione dell’impatto ambientale realizzato con modif...L’impronta ambientale. Riduzione dell’impatto ambientale realizzato con modif...
L’impronta ambientale. Riduzione dell’impatto ambientale realizzato con modif...
 
RadiciGroup at 6th European Nylon Symposium - 27-28 February 2012
RadiciGroup at 6th European Nylon Symposium - 27-28 February 2012 RadiciGroup at 6th European Nylon Symposium - 27-28 February 2012
RadiciGroup at 6th European Nylon Symposium - 27-28 February 2012
 
Young Glory | December
Young Glory | DecemberYoung Glory | December
Young Glory | December
 

Functional thinking in coffee script

  • 3. FIRST, A QUICK POLL FUNCTIONAL PROGRAMMING EXPERIENCE? (THE 80’S COUNTS)
  • 4. FIRST, A QUICK POLL FUNCTIONAL PROGRAMMING EXPERIENCE? (THE 80’S COUNTS) COFFEESCRIPT EXPERIENCE? (NOBODY LIKES A SHOW OFF)
  • 6. AN OVER-SIMPLIFIED COMPARISON... FUNCTIONAL LANGUAGES -  NO SIDE EFFECTS DUE TO LEXICAL SCOPING -  IMMUTABLE OBJECTS -  MONADIC FUNCTIONS (1-ARITY) -  ITERATION THROUGH RECURSION
  • 7. AN OVER-SIMPLIFIED COMPARISON… FUNCTIONAL JAVASCRIPT / LANGUAGES COFFEESCRIPT -  NO SIDE EFFECTS -  SIDE EFFECTS IF YOU DUE TO LEXICAL WANT THEM, UGH! SCOPING -  VERY FEW -  IMMUTABLE OBJECTS IMMUTABLE OBJECTS -  MONADIC FUNCTIONS -  N-ARITY, VARIADIC (1-ARITY) FUNCTIONS -  ITERATION THROUGH -  ITERATION TYPICALLY RECURSION THROUGH CURSORS
  • 9. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES (HOW)
  • 10. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES (HOW) -  USING FREE HAND, PICK UP PORK SANDWICH
  • 11. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES (HOW) -  USING FREE HAND, PICK UP PORK SANDWICH -  RAISE HAND TO MOUTH
  • 12. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES (HOW) -  USING FREE HAND, PICK UP PORK SANDWICH -  RAISE HAND TO MOUTH -  OPEN MOUTH
  • 13. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES (HOW) -  USING FREE HAND, PICK UP PORK SANDWICH -  RAISE HAND TO MOUTH -  OPEN MOUTH -  PLACE PORK SANDWICH IN MOUTH
  • 14. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES (HOW) -  USING FREE HAND, PICK UP PORK SANDWICH -  RAISE HAND TO MOUTH -  OPEN MOUTH -  PLACE PORK SANDWICH IN MOUTH -  RELEASE PORK SANDWICH
  • 15. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES (HOW) -  USING FREE HAND, PICK UP PORK SANDWICH -  RAISE HAND TO MOUTH -  OPEN MOUTH -  PLACE PORK SANDWICH IN MOUTH -  RELEASE PORK SANDWICH -  REMOVE HAND FROM MOUTH
  • 16. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES (HOW) -  USING FREE HAND, PICK UP PORK SANDWICH -  RAISE HAND TO MOUTH -  OPEN MOUTH -  PLACE PORK SANDWICH IN MOUTH -  RELEASE PORK SANDWICH -  REMOVE HAND FROM MOUTH -  CLOSE MOUTH
  • 17. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES (HOW) -  USING FREE HAND, PICK UP PORK SANDWICH -  RAISE HAND TO MOUTH -  OPEN MOUTH -  PLACE PORK SANDWICH IN MOUTH -  RELEASE PORK SANDWICH -  REMOVE HAND FROM MOUTH -  CLOSE MOUTH -  OPEN MOUTH
  • 18. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES (HOW) -  USING FREE HAND, PICK UP PORK SANDWICH -  RAISE HAND TO MOUTH -  OPEN MOUTH -  PLACE PORK SANDWICH IN MOUTH -  RELEASE PORK SANDWICH -  REMOVE HAND FROM MOUTH -  CLOSE MOUTH -  OPEN MOUTH -  CLOSE MOUTH
  • 19. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES (HOW) -  USING FREE HAND, PICK UP PORK SANDWICH -  RAISE HAND TO MOUTH -  OPEN MOUTH -  PLACE PORK SANDWICH IN MOUTH -  RELEASE PORK SANDWICH -  REMOVE HAND FROM MOUTH -  CLOSE MOUTH -  OPEN MOUTH -  CLOSE MOUTH -  OPEN MOUTH
  • 20. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES (HOW) -  USING FREE HAND, PICK UP PORK SANDWICH -  RAISE HAND TO MOUTH -  OPEN MOUTH -  PLACE PORK SANDWICH IN MOUTH -  RELEASE PORK SANDWICH -  REMOVE HAND FROM MOUTH -  CLOSE MOUTH -  OPEN MOUTH -  CLOSE MOUTH -  OPEN MOUTH -  CLOSE MOUTH
  • 21. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES (HOW) -  USING FREE HAND, PICK UP PORK SANDWICH -  RAISE HAND TO MOUTH -  OPEN MOUTH -  PLACE PORK SANDWICH IN MOUTH -  RELEASE PORK SANDWICH -  REMOVE HAND FROM MOUTH -  CLOSE MOUTH -  OPEN MOUTH -  CLOSE MOUTH -  OPEN MOUTH -  CLOSE MOUTH -  SWALLOW
  • 22. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES DECLARATIVE LANGUAGES (HOW) (WHAT) -  USING FREE HAND, PICK UP PORK SANDWICH -  RAISE HAND TO MOUTH -  OPEN MOUTH -  PLACE PORK SANDWICH IN MOUTH -  RELEASE PORK SANDWICH -  REMOVE HAND FROM MOUTH -  CLOSE MOUTH -  OPEN MOUTH -  CLOSE MOUTH -  OPEN MOUTH -  CLOSE MOUTH -  SWALLOW
  • 23. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES DECLARATIVE LANGUAGES (HOW) (WHAT) -  USING FREE HAND, PICK UP PORK SANDWICH -  EAT PORK SANDWICH -  RAISE HAND TO MOUTH -  OPEN MOUTH -  PLACE PORK SANDWICH IN MOUTH -  RELEASE PORK SANDWICH -  REMOVE HAND FROM MOUTH -  CLOSE MOUTH -  OPEN MOUTH -  CLOSE MOUTH -  OPEN MOUTH -  CLOSE MOUTH -  SWALLOW
  • 24. A GROSSLY OVER-SIMPLIFIED COMPARISON… IMPERATIVELY LANGUAGES DECLARATIVE LANGUAGES (HOW) (WHAT) -  USING FREE HAND, PICK UP PORK SANDWICH -  EAT PORK SANDWICH -  RAISE HAND TO MOUTH -  OPEN MOUTH (I SAID “GROSSLY”) -  PLACE PORK SANDWICH IN MOUTH -  RELEASE PORK SANDWICH -  REMOVE HAND FROM MOUTH -  CLOSE MOUTH -  OPEN MOUTH -  CLOSE MOUTH -  OPEN MOUTH -  CLOSE MOUTH -  SWALLOW
  • 25. …WHICH LEADS US TO A FEW CAVEATS
  • 26. …WHICH LEADS US TO A FEW CAVEATS COFFEESCRIPT IS NOT PURELY FUNCTIONAL
  • 27. …WHICH LEADS US TO A FEW CAVEATS COFFEESCRIPT IS NOT PURELY FUNCTIONAL WE DON’T REALLY CARE
  • 28. …WHICH LEADS US TO A FEW CAVEATS COFFEESCRIPT IS NOT PURELY FUNCTIONAL WE DON’T REALLY CARE IT’S JUST JAVASCRIPT
  • 29. WITH THAT, LET’S GET STARTED (WHY YOU’RE REALLY HERE)
  • 30. PROBLEM 1† IF WE LIST ALL THE NATURAL NUMBERS BELOW 10 THAT ARE MULTIPLES OF 3 OR 5, WE GET 3, 5, 6 AND 9. THE SUM OF THESE MULTIPLES IS 23. FIND THE SUM OF ALL THE MULTIPLES OF 3 OR 5 BELOW 1000. † HTTP://PROJECTEULER.NET/PROBLEM=1
  • 31. PROBLEM 1† IF WE LIST ALL THE NATURAL NUMBERS BELOW 10 THAT ARE MULTIPLES OF 3 OR 5, WE GET 3, 5, 6 AND 9. THE SUM OF THESE MULTIPLES IS 23. FIND THE SUM OF ALL THE MULTIPLES OF 3 OR 5 BELOW 1000. (VOLUNTEERS?) † HTTP://PROJECTEULER.NET/PROBLEM=1
  • 32. PROBLEM 1† IF WE LIST ALL THE NATURAL NUMBERS BELOW 10 THAT ARE MULTIPLES OF 3 OR 5, WE GET 3, 5, 6 AND 9. THE SUM OF THESE MULTIPLES IS 23. FIND THE SUM OF ALL THE MULTIPLES OF 3 OR 5 BELOW 1000. FUNCTIONS WE’LL USE: FILTER, REDUCE † HTTP://PROJECTEULER.NET/PROBLEM=1
  • 33. [1, 2, 3, 4].FILTER(FUNCTION(X){ RETURN X % 2 == 0; }); //-> [2, 4] [‘THE’, ‘RAIN’, ‘IN’, ‘SPAIN’].FILTER( FUNCTION(WORD){ RETURN WORD.LENGTH > 4; } ); //-> [‘SPAIN’]
  • 34. [2, 4, 6].REDUCE(FUNCTION(SUM, X){ RETURN SUM + X; }); //-> 12 [1, 2, 3].REDUCE( FUNCTION(STR, X){ RETURN STR + ‘…‘ + X; }, ‘TESTING…TESTING’ ); //-> ‘TESTING…TESTING…1…2…3’
  • 37. PROBLEM 2† THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS IS, 1^2 + 2^2 + ... + 10^2 = 385 THE SQUARE OF THE SUM OF THE FIRST TEN NATURAL NUMBERS IS, (1 + 2 + ... + 10)^2 = 55^2 = 3025 HENCE THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS AND THE SQUARE OF THE SUM IS 3025 - 385 = 2640. FIND THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST ONE HUNDRED NATURAL NUMBERS AND THE SQUARE OF THE SUM. † HTTP://PROJECTEULER.NET/PROBLEM=6
  • 38. PROBLEM 2† THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS IS, 1^2 + 2^2 + ... + 10^2 = 385 THE SQUARE OF THE SUM OF THE FIRST TEN NATURAL NUMBERS IS, (1 + 2 + ... + 10)^2 = 55^2 = 3025 HENCE THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS AND THE SQUARE OF THE SUM IS 3025 - 385 = 2640. FIND THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST ONE HUNDRED NATURAL NUMBERS AND THE SQUARE OF THE SUM. (VOLUNTEERS?) † HTTP://PROJECTEULER.NET/PROBLEM=6
  • 39. PROBLEM 2† THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS IS, 1^2 + 2^2 + ... + 10^2 = 385 THE SQUARE OF THE SUM OF THE FIRST TEN NATURAL NUMBERS IS, (1 + 2 + ... + 10)^2 = 55^2 = 3025 HENCE THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS AND THE SQUARE OF THE SUM IS 3025 - 385 = 2640. FIND THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST ONE HUNDRED NATURAL NUMBERS AND THE SQUARE OF THE SUM. FUNCTIONS WE’LL USE: MAP, REDUCE † HTTP://PROJECTEULER.NET/PROBLEM=6
  • 40. [‘ALAN’, ‘BOB’, ‘FRANK’].MAP(FUNCTION(NAME){ RETURN NAME.LENGTH; }); //-> [4, 3, 5] [1, 2, 3].MAP(FUNCTION(X){ RETURN X * X; }); //-> [1, 4, 9]
  • 43. PROBLEM 3† A PALINDROMIC NUMBER READS THE SAME BOTH WAYS. THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 2-DIGIT NUMBERS IS 9009 = 91 X 99. FIND THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 3-DIGIT NUMBERS. † HTTP://PROJECTEULER.NET/PROBLEM=4
  • 44. PROBLEM 3† A PALINDROMIC NUMBER READS THE SAME BOTH WAYS. THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 2-DIGIT NUMBERS IS 9009 = 91 X 99. FIND THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 3-DIGIT NUMBERS. (VOLUNTEERS?) † HTTP://PROJECTEULER.NET/PROBLEM=4
  • 45. PROBLEM 3† A PALINDROMIC NUMBER READS THE SAME BOTH WAYS. THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 2-DIGIT NUMBERS IS 9009 = 91 X 99. FIND THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 3-DIGIT NUMBERS. FUNCTIONS WE’LL USE: MAP, FILTER, REDUCE † HTTP://PROJECTEULER.NET/PROBLEM=4
  • 48. OKAY JOHN, VERY GOOD. (ANYTHING USEFUL TODAY?)
  • 49. REALISTIC PROBLEM ASSUME WE HAVE A BUNCH OF DOCUMENTS, REPRESENTED AS STRINGS (YES, AN ANEMIC DOMAIN. I SAID IT’D BE REALISTIC). DESIGN A DOCUMENT DATABASE THAT TAKES A COLLECTION OF DOCUMENTS AND RETURNS THE SIZE OF THE LARGEST ONE
  • 50. REALISTIC PROBLEM ASSUME WE HAVE A BUNCH OF DOCUMENTS, REPRESENTED AS STRINGS (YES, AN ANEMIC DOMAIN. I SAID IT’D BE REALISTIC). DESIGN A DOCUMENT DATABASE THAT TAKES A COLLECTION OF DOCUMENTS AND RETURNS THE SIZE OF THE LARGEST ONE (VOLUNTEERS?)
  • 55. QUESTIONS BEFORE WE PAIR? (OR DURING, THAT’S COOL TOO)
  • 56. PAIRING CHALLENGE A COLLATZ SEQUENCE TAKES A NUMBER. IF THAT NUMBER IS EVEN, IT’S DIVIDED BY BY 2. IF IT’S ODD, IT’S MULTIPLIED BY 3 AND ADDED TO 1. THE RESULTING NUMBER IS THEN REAPPLIED TO THE COLLATZ FORMULA, UNTIL WE GET BACK THE NUMBER 1, AT WHICH POINT THE COLLATZ SEQUENCE TERMINATES. FOR ALL STARTING NUMBERS BETWEEN 1 AND 100, HOW MANY COLLATZ SEQUENCES HAVE A LENGTH GREATER THAN 15?