Presentation is loading. Please wait.

Presentation is loading. Please wait.

CSE-321 Programming Languages Introduction to Functional Programming POSTECH March 8, 2006 박성우.

Similar presentations


Presentation on theme: "CSE-321 Programming Languages Introduction to Functional Programming POSTECH March 8, 2006 박성우."— Presentation transcript:

1 CSE-321 Programming Languages Introduction to Functional Programming POSTECH March 8, 2006 박성우

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

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

4 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 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 6 Evaluation Expression Value An expression “evaluates” to a value. We “evaluate” an expression to obtain a value.

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

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

9 9 An Integer Expression if 1 = ~1 then 10 else ~10 ~10 if false then 10 else ~10

10 10 Values as Expressions 1 ???

11 11 Everything is an Expression! 1 ~1 1 = ~1 10 ~10 if 1 = ~1 then 10 else ~10

12 12 Actually Not Everything Ill-formed expressions – if 1 = ~1 then 10 (x) – if 1 = ~1 then 10 else ~10 (x) if 1 = ~1 then 10 else ~10

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

14 14 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

15 15 Local Declaration let val x = 1 val y = x + x val z = y + y in z + z end 8

16 16 Nested Local Declaration let val x = 1 in x + x end let val y = in y + y end let val y = let val x = 1 in x + x end in y + y end

17 17 Why “Local”? let val y = let val x = 1 in x + x end in x + y end okay???

18 18 Variables are NOT variable. The contents of a variable never change. Surprise? –That’s because you are thinking about variables in imperative programming. variables in SML <> variables in C Once you get used to functional programming, immutability of variables in functional programming will be taken for granted!

19 19 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 ?

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

21 21 When is the first time you learned the concept of function?

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

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

24 24 Function = 函數 = Box Number!

25 25 Using a Box Number

26 26 Using a Box Number - Generalized … …

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

28 28 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

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

30 30 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;

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

32 32 So far, So good, So easy.

33 33 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 –…

34 34 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!

35 35 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.

36 36 Box Number as Output … … …… such that

37 37 Box Number as Output … … x +x+x

38 38 x y+xy+x y Box Number as Output

39 39 x y fn y => y+x y+xy+x Box Number as Output

40 40 x y fn y => y+x y+xy+x Box Number as Output

41 41 x y fn y => y+x fn x => (fn y => y+x) y+xy+x Box Number as Output

42 42 In SML Recall the following declarations are equivalent: –val incr = fn x => x + 1; –fun incr x = x + 1; Then: –val add = fn x => (fn y => y + x); –fun add x = fn y => y + x; –fun add x y = y + x; add takes only one argument, not two! In fact, every function in SML takes only a single argument.

43 43 Adding Two Integers (fn x => (fn y => y + x)) 1 2 3 add 1 2 (fn y => y + 1) 2 2 + 1

44 44 Box Number as Input true,false)(

45 45 Box Number as Input true,false)( fn f => (f true, f false) f f f

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

47 47 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

48 48 Type Preservation Expression : T Value : T An evaluation preserves the type of a given expression. Type preservation will be discussed in detail later in this course. –It’s a lot more important than you might think!

49 49 Example let val x = 1 val y = x + x val z = y + y in z + z end 8 : int : int

50 50 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;

51 51 x fn y => y+x fn x => (fn y => y+x) Type of add

52 52 fn y => y+x fn x => (fn y => y+x) Type of add int

53 53 fn x => (fn y => y+x) Type of add int int -> int

54 54 int -> (int -> int) Type of add int int -> int

55 55 What is the Type? true,false)( fn f => (f true, f false) f f f

56 56 f : bool -> int ? true,false)( fn f => (f true, f false) f f f : (bool -> int) -> int * int

57 57 But why is it f : bool -> int ?

58 58 Why not f : bool -> char ? true,false)( fn f => (f true, f false) f f f : (bool -> char) -> char * char

59 59 Then why not f : bool -> string ? f : bool -> int * string ? f : bool -> unit ? f : bool -> (int -> int) ? f : bool -> ? …

60 60 So we need Polymorphism.

61 61 Polymorph in Warcraft 2 Cost: 2000 Gold Mana 200 Range: 10 Time to Upgrade: 200 Time Units. Perhaps the most fearsome of the Mage spells, Polymorph alters the physical form of its target. This metamorphosis changes man to beast, forever warping both mind and body. This sorcery wholly transforms the victim into a creature of the wolds, thus losing their reasoning - making commands for direction or battle impossible. This turns any living creature into the critter for that map type such as Pig for Wasteland, Seal for Snow, Sheep for Forest, Boar for Swamp. Although the unit hasn't been killed it has been in effect killed as it cannot be turned back into the previous unit or commanded in anyway. Polymorph is good for instantly taking out units, especially costly and dangerous units. The primary use for Polymorph is for hit and run attacks against enemy Mages, Death Knights, and Gryphons. Polymorph is really helpful on defense, especially on water maps. When the enemy lands you can quickly Polymorph the most dangerous enemy units right after they unload from the Transport. Make a Mage with at least 200 Mana Invisible, sneak up to an enemy Mage or Dragon and Polymorph it. If it is sea, do the pop out of the Transport Polymorph then run. Often you can cast Polymorph before the enemy even notices it, there is no warning to enemy players that their units have been Polymorphs. Against inattentive players you might be able to Polymorph quite a few units using hit and run attacks before they catch on.

62 62 Polymorphism in Warcraft 3 will be discussed in the next lecture.


Download ppt "CSE-321 Programming Languages Introduction to Functional Programming POSTECH March 8, 2006 박성우."

Similar presentations


Ads by Google