Download presentation
Presentation is loading. Please wait.
Published byImogen Matthews Modified over 9 years ago
1
Functional Programming Element of Functional Programming
2
Functional Programming Functional Programming began as computing with expressions. The following are examples: 2 An integer constant X A variable log n Function log applied to n 2+3 Function + applied to 2 and 3
3
Functional Programming Expressions can also include conditionals and function definitions. Example: The value of following condition expression is the maximum of x and y: if (x > y) then x else y
4
Functional Programming For concreteness, specific ML examples will be written in a typewriter-like font; For example: Computing with expressions will be introduced by designing a little language of expressions. 2 + 2; val it = 4 : int
5
A LITTLE LANGUAGE OF EXPRESSIONS Basic Values Constants: Names for Basic Values Operations Expressions Convenient Extensions Local Declarations
6
A LITTLE LANGUAGE OF EXPRESSIONS Expressions are formed by giving names to values and to operations on them The little language manipulates just one type of value: geometric objects called quilts.
7
Example : Quilt What is Quilt?
8
Little Quilt Little Quilt manipulates geometric objects with Height Width Texture
9
Basic Values Given two primitive objects in the language are the square pieces: Each quilt has A fixed direction or orientation A height A width A texture
10
Operations Quilt can be turned and can be sewn together turn sew
11
Rules 1.A quilt is one of the primitive pieces, or 2.It is formed by turning a guilt clockwise 90, or 3.It is formed by sewing a quilt to the right of another quilt of equal height 4.Nothing else is a quilt Quilts and the operations on them are specified by the following rules:
12
Constants: Names for Basic Values The first step in construction a language to specify quilts is to give names to the primitive pieces and to the operations on quilts Name “a” Name “b” Operation called turn sew
13
Expressions The syntax of expressions mirrors the definition of quilts: Complex expressions are built up from simpler ones, ::= a | b | turn( ) | sew(, )
14
Expressions Sew(turn(turn(b)),a) No expression quilt 1 b 2 turn(b) 3 turn(turn(b)) 4 a 5 sew(turn(turn(b)),a)
15
Convenient Extensions Expressions will now be extended by allowing functions from quilts to quilts. It would be convenient to give names to the operations. Once defined, functions like unturn and pile can used as if they were built in Fun unturn(x) = turn(turn(turn(x))) Fun pile(x,y) = unturn(sew(turn(y),turn(x)))
16
Local Declarations Let-expressions or let-bindings allow declarations to appear within expressions. Let-expression Form Let in end For example let fun unturn(x) = turn(turn(turn(x))) fun pile(x,y) = unturn(sew(turn(y),turn(x))) in pile(unturn(b),turn(b)) end
17
User-Defined Names for Values The final extension is convenient for writing large expressions in terms of simpler ones. A value declaration form: Gives a name to a value val =
18
Value declarations are used together with let- bindings. An expression of the form let val x=E1 in E2 end let val bnw = unturn(b) in pile(bnw,turn(b)) end Rewrite Pile(unturn(b),turn(b))
19
Review: Design of Little Quilt The language Little Quilt was defined by starting with values and operations. The values are quilts, built up from two square pieces; The operations are for turning and sewing quilts. The language began with the name a and b for the square pieces and The names turn and sew for the operations
20
Specification of a quilt Let fun unturn(x) = turn(turn(turn(x))) fun pile(x,y) = unturn(sew(turn(y),turn(x))) val aa = pile(a,turn(turn(a))) val bb = pile(unturn(b),turn(b)) val p = sew(bb,aa) val q = sew(aa,bb) In pile(p,q) end
21
Summary of Little Quilt ::= a | b ::= turn( ) | sew(, ) ::= let in end ::= | ::= fun ( ) = ::= |, ::= ( ) ::= |, ::= val = ::=
22
TYPEs:Values and Operations A types consists of a set of elements called values together with a set of functions called operations. We will consider methods for defining structured values such as products, lists, and functions.
23
The syntax of type expressions ::= | | * | list
24
Structured value Structured values such as lists can be used as freely in functional languages as basic values like integers and strings Value in a function language take advantage of the underlying machine, but are not tied to it.
25
Operations for Constructing and Inspecting Values The structuring methods will be presented by specifying a set of values together with a set of operations. Concentrate on operations for constructing and inspecting the elements of the set. For example To Extend a list by adding a new first element To test whether a list is empty
26
Operations for Constructing and Inspecting Values Basic Types Operations on Basic Values Products of Types Operations on Pairs List of Elements Operations on Lists
27
Basic Types A type is basic if its values are atomic If the values are treated as whole elements, with no internal structure. For example The boolean values in the set {true,false}
28
Operations on Basic Values Basic values have no internal structure, so the only operation defined for all basic types is a comparison for equality; For example The equality 2 = 2 is true, The inequality 2!=2 is false
29
Operations on Basic Values Technically, an operation is a function The equality test on integers is a function from pairs of integers to boolean. The type int*int bool
30
Products of Types The product A*B of two types A and B consists of ordered pairs written as For Example (1,“one”) is a pair consisting of int:1 and string: “one” (a,b) ; where a is a value of type A and b is a value of type B
31
Products of Types A product of n types A*A*A*…*A consists of tuples written as (a 1, a 2, a 3,…, a n ) ; where a i is a value of type A 1
32
Operations on Pairs A pair is constructed from a and b by writing (a,b) Associated with pairs are operations called projection functions to extract the first and second elements from a pair. The first element of the pair (a,b) is a The second element is b Projection functions can be readily defined: fun first(x,y) = x fun second(x,y) = y
33
Lists of Elements A list is a finite-length sequence of elements. For Example int list ; consists of all lists of integers. The type A list consists of all lists of elements, where each element belongs to type A
34
Lists of Elements List elements will be written between brackets [ and ] List elements will be separated by commas The empty list is written equivalently as [ ] For Example [1, 2, 3] is a list of three integers [“red”, “white”, “blue”] is a list of three strings
35
Operations on Lists Lists-manipulation programs must be prepared to construct and inspect lists of any length. The following operations on list are from ML: null(x)True is x is the empty list hd(x)The first or head element of list x. tl(x)The tail or rest of the list. a::xConstruct a list with head a and tail x
36
Operations on Lists For Example Given x is [1, 2, 3] Null(x)false Hd(x)1 Tl(x)[2, 3] From the following equalities: [1, 2, 3] = 1::[2, 3] = 1::2::[3] = 1::2::3::[]
37
Functions from a Domain to a Range The type A B is the set of all functions from A to B For Example If Q is the set of quilt then function turn from quilts to quilts is Q Q function sew form pairs of quits to quilts is Q*Q Q
38
Functions from a Domain to a Range A function f in A B is total A function f in A B is partial If it associates an element of B with each element of A A is called the domain and B is called the range of f. It is possible for there to be no element of B associated with an element of A
39
Function Application The set A B is application which takes a function f in A B and an element a in A and yields and element b of B. For Example A function is applied in ML; f a is the application of f to a.
40
APPOACHES TO EXPRESSION EVALUATION The rules for expression are base on the structure of expressions E1 + E2 1.Evaluate the subexpressions E1 and 2.Evaluate the subexpressions E2 and 3.Add two values
41
Innermost Evaluation Evaluate the expression represented by Substitute the result for the formal in the function body Evaluate the body Return its value as the answer
42
Selection Evaluate is an expression that evaluates to either true or false. True : is evaluated False : is evaluated If then else
43
Evaluation of Recursive Functions The actual parameters are evaluated and substituted into the function body. Length(X) ((cond (null X) 0 (+ 1 (length(cdrX))))) Length([“hello”, “world”]) = 1 + length([“world”]) = 1 + 1 + length([]) = 1 + 1 + 0 = 2
44
Othermost Evaluation Substitute the actual for the formal in the function body Evaluate the body Return its value as the answer.
45
Example Function Fun f(x) = if x > 100 then x-10 else f(f(x+11))
46
Innermost Evaluate F(100) = if 100>100 then 100-10 else f(f(100+11)) = f(f(100+11)) = f(f(111)) = f( if 111> 100 then 111-10 else f(f(111+11)) ) = f(111-10) = f(101) = if 101>100 then 101-10 else f(f(101+11)) = 101 – 10 = 91
47
Outermost Evaluate F(100) = if 100>100 then 100-10 else f(f(100+11)) = f(f(100+11)) = if f(111> 100) then f(111+11)-10 else f(f(f(100+11)+11)) ) F(100+11) = if 100+11> 100 then 100+11-10 else f(f(100+11+11)) = if 111>100 then 100+11-10 else f(f(100+11+11)) = 100+11-10 = 111-10 = 101
48
LEXICAL SCOPE Renaming is made precide by introducing a notion of local or “bound” variables;bound occurrences of variables can be renamed without changing the meaning of a program fun successor(x) = x + 1 fun successor(n) = n + 1
49
Val Bindings Binding occurrence or simply binding of x All occurrences of x in E2 are said to be within the scope of this binding Occurrences of x in E1 are not in the scope of this binding of x let val x=E1 in E2 end let val x=2 in x+x end
50
Fun Bindings This binding of the formal parameter x is visible only to the occurrences of x in E1 This binding of the function name f is visible to all occurrences of f in both E1 and E2 let fun f(x)=E1 in E2 end let fun f(x)=x+1 in 2*f(x) end
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.