csci 2325 functional programming with haskell
play

CSCI-2325 Functional Programming with Haskell Mohammad T . Irfan - PDF document

12/2/2013 CSCI-2325 Functional Programming with Haskell Mohammad T . Irfan 12/2/13 Recap: Functional Programming 1 12/2/2013 Functional Programming Mimic mathematical functions No variables No assignment statements How


  1. 12/2/2013 CSCI-2325 Functional Programming with Haskell Mohammad T . Irfan 12/2/13 Recap: Functional Programming 1

  2. 12/2/2013 Functional Programming  Mimic mathematical functions  No variables  No assignment statements  How about iterative statement?  Alternative?  Context-independent  Referential transparency Interesting facts: LISP and LISP Machine John McCarthy Knight machine LISP(1958) (1980s) 2

  3. 12/2/2013 Core concept: λ calculus  Alonzo Church (1941)  λ expression  Parameters and mapping of a function  No name  Example  λ (x) x * x * x  Evaluation: ( λ (x) x * x * x)(2) produces 8 Haskell 3

  4. 12/2/2013 Resources  Installation  http://www.haskell.org/platform/  Haskell (GHCi) commands  http://www.haskell.org/ghc/docs/7.4.1/html/users_gui de/ghci-commands.html  Learning  Best book: Miran Lipovaca’s Learn You a Haskell for Great Good!  http://learnyouahaskell.com/ (free online version)  Useful how-to page  http://www.haskell.org/haskellwiki/Category:How_to  Other resources: http://www.haskell.org/haskellwiki/Learning_Haskell 4

  5. 12/2/2013 Haskell Warm-up exercises Elementary functions  Make a myFunctions.hs file and define the following functions in it  doubleMe x = x + x  addSquares x y = x*x + y*y  Using the terminal go to the folder of that .hs file  Execute this command: ghci  Load the .hs file  :load myFunctions.hs (or, :l myFunctions.hs)  Use your functions  addSquares 5 10  If you change the .hs file => Execute :r to reload 5

  6. 12/2/2013 Recursion – Fibonacci numbers  fibonacci n = if n == 0 then 1 else if n == 1 then 1 else if n > 1 then fibonacci (n-1)+fibonacci (n-2) else 0  fib n | n == 0 = 1 | n == 1 = 1 Guard | n > 1 = fib (n-1) + fib (n-2) | otherwise = 0 Recursion – factorial  factorial n | n == 0 = 1 | n > 0 = n * factorial (n-1) -- why not factorial n – 1 ? Comment  Try this: factorial 100 6

  7. 12/2/2013 Recursion – sorting  sort [] = [] Empty list  sort (head:remainingList) = sort [b | b <- remainingList, b < head] ++ [head] ++ sort [b | b <- remainingList, b >= head] List generator Lists  evens = [0, 2 .. 10]  In terminal (ghci): let evens = [0, 2 .. 10]  evens = [2*x | x <- [0..5] ]  Infinite lists  allEvens = [0, 2 ..] Are these assignment statements? 7

  8. 12/2/2013 Anatomy of a list  Two parts  head  List of the remaining elements (AKA tail)  Functions head and tail return these  head evens  tail evens  Joining head and tail by : operator  0 : [2, 4 .. 10] will give [0, 2, 4, 6, 8, 10]  Reference  http://www.haskell.org/haskellwiki/How_to_work_on_lists More list examples  Factors of a number n  factors n = [f | f <- [1 .. n], mod n f == 0]  Prime numbers  primes = primeGen' [2 ..] where primeGen' (p:xs) = p : primeGen' [q | q <- xs, mod q p /= 0]  Getting the first 10 prime numbers  take 10 primes Lazy evaluation  Side note: This is not really the sieve of Eratosthenes http://www.cs.hmc.edu/~oneill/papers/Sieve-JFP .pdf 8

  9. 12/2/2013 Recursion vs. iteration  Iterative factorial  factorial n = product [1 .. n]  Iterative sum  sum [1 .. 5]  Recursive sum  recSum [] = 0 recSum (x:xs) = x + recSum xs recSum is polymorphic (Works with any compatible type) n-queens problem queens n = solve n where solve k | k <= 0 = [ [] ] | otherwise = [ h:partial | partial <- solve (k-1), h <- [0..(n-1)], safe h partial] safe h partial = and [ not ( checks h partial i) | i <- [0..(length partial - 1)]] checks h partial i = h == partial!!i || abs(h - partial!!i) == i+1 9

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend