A brief introduction to functional programming                 Sebastian Wild                  Stylight GmbH              ...
Functional programming languagesSome programming concepts   Variables and Functions   Currying   Functions as parameters  ...
And that language is fast. I mean, really astoundingly    fast, which is why it is so evil. It’s like that psychotic    gi...
Functional programming languages      Pure      Haskell, Charity, Clean, Curry, Hope, Miranda      Impure      Erlang, F#,...
First program   # p r i n t s t r i n g ” H e l l o , World ! ” ; ;   H e l l o , World : u n i t = ( )
Variables and Functions   # let a = 5;;   val a : int = 5   # let a = 5 + 3;;   val a : int = 8   (∗ ! ! A t t e n t i o n...
Variables and Functions   # l e t a = (5 , () , ” Hello ” ) ; ;   v a l a : i n t ∗ u n i t ∗ s t r i n g = (5 , ( ) , ” H...
Currying  # let f (x , y) = x ∗ y ; ;  v a l f : i n t ∗ i n t −> i n t = <fun>
Currying  # let f x y = x ∗ y ;;  v a l f : i n t −> i n t −> i n t = <fun>   ( ∗ Types a r e r i g h t b r a c k e t e d ...
Currying  # let f x y = x ∗ y ;;  # let a = f 5;;  v a l a : i n t −> i n t = <fun>  # let b = a 6;;  v a l b : i n t = 30...
Functions as parameters   # let a = [1;2;3;4];;   val a : int l i s t = [ 1 ; 2; 3; 4]   # l e t r e c map f s =         m...
Functions as parameters   L i s t . f o l d l e f t : ( ’ a −> ’ b −> ’ a ) −> ’ a −> ’ b l i s t −   L i s t . f o l d l ...
Accumulators   Faculty of n:  # l e t rec fac n =        i f n <= 0 t h e n 1        else n ∗ fac (n − 1 ) ; ;  v a l f a ...
Accumulator  Tail recursive:  # l e t fac n =        l e t r e c fac ’ acc n =              i f n <= 0 t h e n a c c      ...
Advanced examples  http://www.ffconsultancy.com/ocaml/bunny/index.html  http://www.ffconsultancy.com/ocaml/ray tracer/index....
Summary      No side effects      Strong type system      Mathematical functions can be expressed very easily      Steep le...
Upcoming SlideShare
Loading in …5
×

A brief introduction to functional programming

313 views

Published on

In this short presentation we explain some of the general concepts of functional programming.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
313
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

A brief introduction to functional programming

  1. 1. A brief introduction to functional programming Sebastian Wild Stylight GmbH October 31, 2012
  2. 2. Functional programming languagesSome programming concepts Variables and Functions Currying Functions as parameters AccumulatorsAdvanced examplesSummary
  3. 3. And that language is fast. I mean, really astoundingly fast, which is why it is so evil. It’s like that psychotic girlfriend that was amazing in bed. You keep trying to break up with her, but she seduces you right back into that abusive relationship.from brool.comArticle: The Genius of Python, The Agony of OCaml
  4. 4. Functional programming languages Pure Haskell, Charity, Clean, Curry, Hope, Miranda Impure Erlang, F#, Lisp, ML (Standard ML, OCaml), Scala, Spreadsheets
  5. 5. First program # p r i n t s t r i n g ” H e l l o , World ! ” ; ; H e l l o , World : u n i t = ( )
  6. 6. Variables and Functions # let a = 5;; val a : int = 5 # let a = 5 + 3;; val a : int = 8 (∗ ! ! A t t e n t i o n ! ! Strong type system ∗) # let a = 5 + 3.0;;
  7. 7. Variables and Functions # l e t a = (5 , () , ” Hello ” ) ; ; v a l a : i n t ∗ u n i t ∗ s t r i n g = (5 , ( ) , ” H e l l o ”) # let f x = x ∗ x ;; v a l f : i n t −> i n t = <fun>
  8. 8. Currying # let f (x , y) = x ∗ y ; ; v a l f : i n t ∗ i n t −> i n t = <fun>
  9. 9. Currying # let f x y = x ∗ y ;; v a l f : i n t −> i n t −> i n t = <fun> ( ∗ Types a r e r i g h t b r a c k e t e d ∗ ) i n t −> ( i n t −> i n t )
  10. 10. Currying # let f x y = x ∗ y ;; # let a = f 5;; v a l a : i n t −> i n t = <fun> # let b = a 6;; v a l b : i n t = 30 (∗ Function c a l l s are l e f t b r a c k e t e d ∗) # v a l b = ( f 5) 6 ; ; v a l b : i n t = 30
  11. 11. Functions as parameters # let a = [1;2;3;4];; val a : int l i s t = [ 1 ; 2; 3; 4] # l e t r e c map f s = match s w i t h [ ] −> [ ] | x : : x s −> ( f x ) : : ( map f x s ) ; ; v a l map : ( ’ a −> ’ b ) −> ’ a l i s t −> ’ b l i s t = <fun> # l e t b = map ( f u n v −> 2 ∗ v ) a ; ; val b : int l i s t = [ 2 ; 4; 6; 8]
  12. 12. Functions as parameters L i s t . f o l d l e f t : ( ’ a −> ’ b −> ’ a ) −> ’ a −> ’ b l i s t − L i s t . f o l d l e f t f a [ b1 ; . . . ; bn ] f ( . . . ( f ( f a b1 ) b2 ) . . . ) # L i s t . f o l d l e f t (+) 0 [ 1 ; 2 ; 3 ; 4 ; 5 ; 6 ] ; ; − : i n t = 21
  13. 13. Accumulators Faculty of n: # l e t rec fac n = i f n <= 0 t h e n 1 else n ∗ fac (n − 1 ) ; ; v a l f a c : i n t −> i n t = <fun>
  14. 14. Accumulator Tail recursive: # l e t fac n = l e t r e c fac ’ acc n = i f n <= 0 t h e n a c c e l s e f a c ’ ( n∗ a c c ) ( n−1) i n fac ’ 1 n ; ; v a l f a c : i n t −> i n t = <fun>
  15. 15. Advanced examples http://www.ffconsultancy.com/ocaml/bunny/index.html http://www.ffconsultancy.com/ocaml/ray tracer/index.html
  16. 16. Summary No side effects Strong type system Mathematical functions can be expressed very easily Steep learning curve https://github.com/wildsebastian/AlgorithmsDataStructures

×