1 / 62

CSE-321 Programming Languages Introduction to Functional Programming

CSE-321 Programming Languages Introduction to Functional Programming. 박성우. POSTECH March 7, 2007. Programming Paradigms. Structural programming C, Pascal, … Object-oriented programming C++, Java, … Logic programming Prolog, … Functional programming

mcalvert
Download Presentation

CSE-321 Programming Languages Introduction to 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. CSE-321 Programming LanguagesIntroduction to Functional Programming 박성우 POSTECH March 7, 2007

  2. Programming Paradigms • Structural programming • C, Pascal, … • Object-oriented programming • C++, Java, … • Logic programming • Prolog, … • Functional programming • SML, Haskell, Objective Caml, Lisp, Scheme, …

  3. Outline • Expressions and values • Variables • Functions • Types • Recursion • Datatypes • Pattern matching • Higher-order functions • Exceptions • Modules

  4. C • A program consists of commands. • command = “do something” • Nothing wrong: if (x == 1) then x = x + 1; else x = x - 1; • Nothing wrong either: if (x == 1) then x = x + 1;

  5. SML • A program consists of expressions. • expression = “obtain a value” • Nothing wrong: if (x = 1) then x + 1 else x - 1 • But this does not make sense: if (x = 1) then x + 1 • what is the value if x <> 1?

  6. Evaluation • An expression “evaluates” to a value. • We “evaluate” an expression to obtain a value. Expression Value

  7. Integer Evaluation 1 + 1 2 1 - 1 0 1 * 1 1 …

  8. Boolean Evaluation 1 = 1 true 1 <> 1 false 1 <> 0 true …

  9. An Integer Expression if1 = ~1then 10 else ~10 iffalsethen 10 else~10 ~10

  10. Values as Expressions 1 ???

  11. Outline • Expressions and values V • Variables • Functions • Types • Recursion • Datatypes • Pattern matching • Higher-order functions • Exceptions • Modules

  12. Variable Declaration - val x = 1 + 1; val x = 2 : int • A variable x is “bound” to value 2. • From now on, any occurrence of x is replaced by 2. - val y = x + x; val y = 4 : int

  13. Local Declaration • let • val x = 1 • val y = x + x • val z = y + y • in • z + z • end 8

  14. Nested Local Declaration • let • val x = 1 • in • x + x • end • let • val y = <expression> • in • y + y • end • let • val y = letval x = 1 in x + x end • in • y + y • end

  15. Why “Local”? • let • val y = let • valx = 1 • in • x + x • end • in • x + y • end okay???

  16. Variables are NOT variable. • The contents of a variable never change. • immutability of variables • Surprise? • That’s because you are thinking about variables in imperative programming. variables in SML <> variables in C

  17. Then Why Variables? • Any advantage in using variables at all? • let • val x = 1 • val y = x + x • val z = y + y • in • z + z • end ((1 + 1) + (1 + 1)) + ((1 + 1) + (1 + 1)) VS. What if it takes 10 hours to evaluate 1?

  18. Outline • Expressions and values V • Variables V • Functions • Types • Recursion • Datatypes • Pattern matching • Higher-order functions • Exceptions • Modules

  19. When is the first time you learned the concept of function?

  20. 즐거운 낱말공부 시간 • 함수(函數): 두 변수 x, y간에 어떤 관계가 있어 x의 변화에 따라 y가 일정한 법칙으로 변화할 때 y를 x의 함수라 함. (function) (동아 마스타 국어사전)

  21. 즐거운 한자 공부 시간 • 函 1. 함(함). 2. 편지(함) 3. 갑옷(함) 4. 넣을, 들일(함) 예: (書函) 서함: 책을 넣는 상자

  22. Function = 函數 = Box Number!

  23. Using a Box Number

  24. Using a Box Number - Generalized … …

  25. Function in SML = Box Number (fn x => x + 1) n =

  26. Function Application • We “apply” (fn x => x + 1) to n. • x is called a formal argument/parameter. • n is called an actual argument/parameter. … (fn x => x + 1) n

  27. … Evaluating a Function Application (fn x => x + 1) n n+ 1

  28. Functions in SML • Nameless function • fn x => x + 1; • Storing a nameless function to a variable • val incr = fn x => x + 1; • Function declaration • fun incr x = x + 1;

  29. Function Applications incr 1 (fn x => x + 1) 1 1 + 1 2

  30. First-class Objects • First-class objects = primitive objects • can be stored in a variable. • can be passed as an argument to a function. • can be returned as a return value of a function. • Examples: • integers • booleans • characters • floating-point numbers • …

  31. First-class Objects in C • First-class objects • integers • characters • floating-point numbers • pointers • structures • … • Functions? • Function pointers are first-class objects. • But functions are not. • Why? You cannot create new functions on the fly!

  32. Functions = First-class Objects in SML • Functions: • can be passed as an argument to a function. • can be returned as a return value of a function.

  33. … … … Box Number as Output such that

  34. … Box Number as Output x +x

  35. Box Number as Output x y y+x

  36. Box Number as Output x y fn y => y+x y+x

  37. Box Number as Output x y fn y => y+x y+x fn y => y+x

  38. Box Number as Output x y fnx => (fn y => y+x) fn y => y+x y+x fn y => y+x

  39. In SML • Recall the following declarations are equivalent: • val incr = fnx => x + 1; • fun incr x = x + 1; • Then: • val add = fnx => (fny => y + x); • fun add x = fny => y + x; • fun add xy = y + x; • add takes only one argument, not two! • In fact, every function in SML takes only one argument.

  40. Adding Two Integers add 1 2 (fnx => (fny => y + x)) 1 2 (fny => y + 1) 2 2 + 1 3

  41. Box Number as Input ( true, false)

  42. Box Number as Input f fnf => (f true, f false) ( true, false) f f

  43. Outline • Expressions and values V • Variables V • Functions V • Types • Recursion • Datatypes • Pattern matching • Higher-order functions • Exceptions • Modules

  44. Types • A type specifies what kind of value a given expression evaluates to. • 1 + 1 : int • true andalso false : bool • #”A” : char • ”hello” : string • (1, true) : int * bool • (1, ~1, true) : int * int * bool • 1.0 : real • () : unit

  45. Type Preservation • An evaluation preserves the type of a given expression. Expression : T Value : T

  46. Example • let • val x = 1 • val y = x + x • val z = y + y • in • z + z • end : int 8 : int

  47. Function Types • T -> T’ • type of functions: • taking arguments of type T • returning values of type T’ • Example: • val incr = fn x => x + 1;val incr = fn : int -> int • fun incr x = x + 1;val incr = fn : int -> int • Explicit type annotation • val incr = fn (x:int) => x + 1; val incr = fn (x:int) : int => x + 1; • fun incr (x:int)= x + 1; fun incr (x:int) : int = x + 1;

  48. x fnx => (fn y => y+x) fn y => y+x Type of add

  49. Type of add int fnx => (fn y => y+x) fn y => y+x

  50. Type of add int fnx => (fn y => y+x) int -> int

More Related