Functional Programming

16
Functional Programming Chris Eidhof Eelco Lempsink Amsterdam.rb, October 27, 2008

Transcript of Functional Programming

Page 1: Functional Programming

Functional Programming

Chris Eidhof Eelco Lempsink

Amsterdam.rb, October 27, 2008

(,) tupil

Page 2: Functional Programming

Functional programming in Ruby

(1..4).collect {|i| i*i }#=> [1, 4, 9, 16]

(1..10).inject {|sum, n| sum + n}#=> 55

Page 3: Functional Programming

Functional programming with Haskell

(1..4).collect {|i| i*i }

map (λi → i ∗ i) [1 . .4] -- [1,4,9,16]

(1..10).inject {|sum, n| sum + n}

foldr (λn sum→ sum + n) 0 [1 . .10] -- 55

Page 4: Functional Programming

What is Haskell?

Haskell is a

• strongly typed

• lazy

• purely functional

programming language

Page 5: Functional Programming

Everything is a function

• No “assignment”

• Referential transparancy

• Partial application, no parentheses needed

a = 5a = 6 -- Invalid!

squares xs = map (λx → x ∗ x) xs

Page 6: Functional Programming

Why should I learn Haskell?

• Functional Programming gives you a fresh way to look atproblems

• Even if you don’t use a functional language

• Python, Ruby, C# all use ideas from FP

• Google’s Map/Reduce and Hadoop are large scale FP

Page 7: Functional Programming

Lists

data [a ] = [ ]| a : [a ]

Page 8: Functional Programming

Some standard functions

sum [ ] = 0sum (x : xs) = x + sum xs

product [ ] = 1product (x : xs) = x ∗ product xs

and [ ] = Trueand (x : xs) = x ∧ and xs

Page 9: Functional Programming

Everything is a fold!

foldr (⊕) e [ ] = efoldr (⊕) e (x : xs) = x ⊕ (foldr (⊕) e xs)

sum = foldr ( + ) 0product = foldr ( ∗ ) 1and = foldr ( ∧ ) True

Page 10: Functional Programming

Even map!

map f = foldr (λx tail → (f x) : tail) [ ]

Page 11: Functional Programming

Infinite lists...

primes = sieve [2 . . ]sieve (p : xs) = p : sieve [x | x ← xs

, x ‘mod ‘ p 6≡ 0]

Page 12: Functional Programming

QuickSort

qsort [ ] = [ ]qsort (x : xs) = qsort (filter (<x) xs)

++ [x ]++ qsort (filter (> x) xs)

Page 13: Functional Programming

What we didn’t tell you

• Function composition

• Types

• Purity and I/O

• Monads

• Foreign Function Interface

• . . .

Page 14: Functional Programming

Haskell in the Real World

• Large applications (XMonad, Darcs, GHC, Yi)

• Lots of libraries (Today on hackage: 814 libraries andprograms)

• Used by large companies (Credit Suisse, Galois, Microsoft,ABN Amro . . . )

• Lots of ways to learn Haskell ((free) textbooks, universitycourses, haskell wiki, blogs)

Page 15: Functional Programming

Functional programming

• ... sharpens your brain

• ... is lots of fun

• ... can help you become a better programmer

Page 16: Functional Programming

More information

• http://haskell.org

• http://hackage.haskell.org

• http://book.realworldhaskell.org/

• http://tupil.com