1 / 17

GC16/3011 Functional Programming Lecture 5 Miranda

GC16/3011 Functional Programming Lecture 5 Miranda. patterns, functions, recursion and lists. Contents. Offside rule / where blocks / evaluation Partial / polymorphic functions Patterns and pattern-matching Recursive functions Lists Functions using lists Recursive functions using lists.

blaze
Télécharger la présentation

GC16/3011 Functional Programming Lecture 5 Miranda

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. GC16/3011 Functional ProgrammingLecture 5Miranda patterns, functions, recursion and lists

  2. Contents • Offside rule / where blocks / evaluation • Partial / polymorphic functions • Patterns and pattern-matching • Recursive functions • Lists • Functions using lists • Recursive functions using lists

  3. Functions • The offside rule and “where” blocks • Mapping from source to target type domains • Application associates to the left! • Function evaluation • normal order, lazy • main = fst (34, (23 / 0) )

  4. Functions • Partial functions • those which have no result (i.e. return an error) for some valid values of valid input type • f (x,y) = x / y • Polymorphic functions • fst, snd • g (x,y) = (-y, x) • three x = 3

  5. Patterns • Tuple patterns • (x,y,z) = (3, “hello”, (34,True,[3])) • as a test • as a definition • Patterns for function definitions not True = False not False = True • Top-down evaluation semantics f 3 = 45 f 489 = 3 f any = 345*219

  6. Patterns • Non-exhaustive patterns f True = False • Patterns can destroy laziness fst (x,0) = x fst (x,y) = x • Can a pattern contain a redex? • No! A pattern must be a constant expression • (special exception – “(n + 1)” in Miranda) • Duplicate parameter names (Miranda only)

  7. Recursive Functions • Recursion is the ONLY way to program loops in a functional language • Function calls itself inside its own body • Very powerful – very flexible • In imperative languages, can be slow • In functional languages, highly optimised

  8. Recursive Functions • Beware: loop_forever x = loop_forever x • Must have: • Terminating condition • Changing argument • …that converges on the terminating condition! f :: num -> [char] f 0 = “” f n = “X” ++ (f (n – 1))

  9. Recursive Functions • Stack recursion • f 3 • è “X” ++ (f (3 – 1)) • è “X” ++ (f 2) • è “X” ++ (“X” ++ (f (2-1))) • è “X” ++ (“X” ++ (f 1)) • è “X” ++ (“X” ++ (“X” ++ (f (1-1)))) • è “X” ++ (“X” ++ (“X” ++ “”)) • è “X” ++ (“X” ++ “X”) • è “X” ++ “XX” • è “XXX”

  10. Recursive Functions • Accumulative recursion plus :: (num, num) -> num plus (x, 0) = x plus (x, y) = plus (x+1, y-1)

  11. Type Synonyms • f :: (([char],num,[char]),(num,num,num)) -> bool • str = = [char] • coord = = (num, num, num) • f :: ((str,num,str), coord) -> bool

  12. LISTS • Lists are another way to collect together related data • But lists are special - they are RECURSIVE • Data can be recursive, just like functions!

  13. LISTS • A list of type a is either: • Empty, or • An element of type a together with a list of elements of the same type • List of num: • [] • (34: []) [34] • (34: (13: [])) [34, 13]

  14. Functions using lists bothempty :: ([*],[**]) -> bool bothempty ([], []) = True bothempty anything = False myhd :: [*] -> * myhd [] = error “take head of empty list” myhd (x : rest) = x

  15. Recursive functions using lists sumlist :: [num] -> num sumlist [] = 0 sumlist (x : rest) = x + (sumlist rest) length :: [*] -> num length [] = 0 length (x : rest) = 1 + (length rest)

  16. Exercise • Can you write a function “threes” which takes as input a list of whole numbers and produces as output a count of how many 3s occur in the input?

  17. Summary • Offside rule / where blocks / evaluation • Partial / polymorphic functions • Patterns and pattern-matching • Recursive functions • Lists • Functions using lists • Recursive functions using lists

More Related