1 / 18

Functional Programming

Functional Programming. Symbolic AI is based on a representation of the world in terms of symbols and rules. Here, the AI comes in the form of algorithms that manipulate the symbols in order to solve problems or derive new knowledge.

farrah
Télécharger la présentation

Functional Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Functional Programming • Symbolic AI is based on a representation of the world in terms of symbols and rules. • Here, the AI comes in the form of algorithms that manipulate the symbols in order to solve problems or derive new knowledge. • In order to explore such algorithms and experiment with them, we will use a functional programming language. • Functional programming languages are well-suited for implementing complex algorithms in a concise and readable way and offer great flexibility in modifying, reusing, and testing code. Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  2. The Haskell Language • Traditionally, AI researchers and educators used the language LISP. • LISP is a powerful language that is still being used; for example, emacs is programmed in LISP. • However, in my opinion, LISP programs are not very readable or at least require some time to get used to. • Therefore, we will use Haskell, which has a rather straightforward and clear syntax. • It is similar to many other functional languages such as F#, ML, Miranda, or OCaml. Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  3. The Haskell Language • You can download the Haskell Platform and find tons of information about the language here: • http://www.haskell.org • In particular, please study Chapters 1 to 6 of the free online Haskell Tutorial with the beautiful title: “Learn you a Haskell for Great Good!” • http://learnyouahaskell.com/ • In the next lecture, we will review the Haskell basics, discuss your questions and look at some more advanced Haskell topics. Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  4. Today’s Haskell Session in Class • Please take some time to study Haskell; it’s not only important for this course, but knowing principles of functional programming will also make you a better programmer in imperative languages such as C++ or Java. • The next page shows the Haskell programs we developed in class today, followed by the complete protocol of our Haskell session. • Please e-mail me anytime with any questions you may have. Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  5. The Programs We Wrote Today • fact 0 = 1 • fact n = n*fact (n - 1) • mymap f [] = [] • mymap f (x:xs) = (f x):(mymap f xs) • quicksort [] = [] • quicksort (x:xs) = (quicksort smaller) ++ [x] ++ (quicksort greater) • where smaller = filter (< x) xs • greater = filter (>= x) xs Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  6. Today’s Haskell Session (1) • *Main> 5 • 5 • it :: Integer • *Main> it • 5 • it :: Integer • *Main> 5+3 • 8 • it :: Integer • *Main> 5/3 • 1.6666666666666667 • it :: Double • *Main> 2^10 • 1024 • it :: Integer Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  7. Today’s Haskell Session (2) • *Main>2^1000000 • … a few hours later… • … 888403162747109376 • it :: Integer • *Main> 'a' • 'a' • it :: Char • *Main> 'b' • 'b' • it :: Char • *Main> 3 == 5 • False • it :: Bool Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  8. Today’s Haskell Session (3) • *Main> 5 == 5 • True • it :: Bool • *Main> let double x = 2*x • double :: Num a => a -> a • *Main> double 4 • 8 • it :: Integer • *Main> double 2.2 • 4.4 • it :: Double • *Main> let mult x y = x*y • mult :: Num a => a -> a -> a Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  9. Today’s Haskell Session (4) • *Main>mult 4 7 • 28 • it :: Integer • *Main>mult 4.4 7.1 • 31.240000000000002 • it :: Double • *Main> let timesthree = mult 3 • timesthree :: Integer -> Integer • *Main>timesthree 4 • 12 • it :: Integer • *Main> (5, 3) • (5,3) • it :: (Integer, Integer) Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  10. Today’s Haskell Session (5) • *Main>fst it • 5 • it :: Integer • *Main>snd (5, 3) • 3 • it :: Integer • *Main> :t fst • fst :: (a, b) -> a • *Main> [] • [] • it :: [a] • *Main> [3] • [3] • it :: [Integer] Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  11. Today’s Haskell Session (6) • *Main> 3:[5] • [3,5] • it :: [Integer] • *Main> [1..10] • [1,2,3,4,5,6,7,8,9,10] • it :: [Integer] • *Main> ['a'..'z'] • "abcdefghijklmnopqrstuvwxyz" • it :: [Char] • *Main> even 5 • False • it :: Bool • *Main> mod 5 2 • 1 • it :: Integer Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  12. Today’s Haskell Session (7) • *Main> [x | x <- [1..10], even x] • [2,4,6,8,10] • it :: [Integer] • *Main> [(x,y) | x <- [1..3], y <- ['a'..'c']] • [(1,'a'),(1,'b'),(1,'c'),(2,'a'),(2,'b'),(2,'c'),(3,'a'),(3,'b'),(3,'c')] • it :: [(Integer, Char)] • *Main>mult 5 5.5 • 27.5 • it :: Double • *Main> let prime n = n > 1 && [x | x <- [2..(div n 2)], mod n x = 0] == [] • <interactive>:77:58: parse error on input `=' • *Main> let prime n = n > 1 && [x | x <- [2..(div n 2)], mod n x == 0] == [] • prime :: Integral t => t -> Bool Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  13. Today’s Haskell Session (8) • *Main> prime 2 • True • it :: Bool • *Main> prime 3 • True • it :: Bool • *Main> prime 4 • False • it :: Bool • *Main> filter even [1..100] • [2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100] • it :: [Integer] Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  14. Today’s Haskell Session (9) • *Main> :t filter • filter :: (a -> Bool) -> [a] -> [a] • *Main> filter prime [1..100] • [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97] • it :: [Integer] • *Main> filter prime [1..10000] • [2,3,5,7,11,13,17,19,23,29,31,37,41,43… and so on and on… • … 9871,9883,9887,9901,9907,9923,9929,9931,9941,9949,9967,9973] • it :: [Integer] • *Main>mult 5 6 • 30 • it :: Integer • *Main> map prime [3, 4, 5] • [True,False,True] • it :: [Bool] Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  15. Today’s Haskell Session (10) • *Main> :t map • map :: (a -> b) -> [a] -> [b] • *Main> map (mult 3) [1..10] • [3,6,9,12,15,18,21,24,27,30] • it :: [Integer] • *Main> :t (mult 3) • (mult 3) :: Num a => a -> a • *Main> 4 + 7 • 11 • it :: Integer • *Main> + 4 7 • <interactive>:92:1: parse error on input `+' Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  16. Today’s Haskell Session (11) • *Main> (+) 4 7 • 11 • it :: Integer • *Main> map (* 3) [1..10] • [3,6,9,12,15,18,21,24,27,30] • it :: [Integer] • *Main> "hello" ++ " world!" • "hello world!" • it :: [Char] • *Main> [1..10] ++ [30..40] • [1,2,3,4,5,6,7,8,9,10,30,31,32,33,34,35,36,37,38,39,40] • it :: [Integer] • *Main> :reload • [1 of 1] Compiling Main ( test.hs, interpreted ) • Ok, modules loaded: Main. Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  17. Today’s Haskell Session (12) • *Main> fact 0 • 1 • it :: Integer • *Main> fact 1 • 1 • it :: Integer • *Main> map fact [1..10] • [1,2,6,24,120,720,5040,40320,362880,3628800] • it :: [Integer] • *Main> :reload • [1 of 1] Compiling Main ( test.hs, interpreted ) • Ok, modules loaded: Main. • *Main>mymap even [1..100] • [False,True,False,True,False,True,… and so on…, False, True] • it :: [Bool] Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

  18. Today’s Haskell Session (13) • *Main> :reload • [1 of 1] Compiling Main ( test.hs, interpreted ) • Ok, modules loaded: Main. • *Main> quicksort "hello world!" • " !dehllloorw" • it :: [Char] • *Main> :t quicksort • quicksort :: Ord a => [a] -> [a] Introduction to Artificial Intelligence Lecture 5: Functional Programming with Haskell

More Related