Aznpho's picture
From Aznpho rss RSS  subscribe Subscribe

Programming Language Concepts 



 

 
 
Views:  760
Downloads:  4
Published:  September 26, 2007
 
0
download

Share plick with friends Share
save to favorite
Report Abuse Report Abuse
 
Related Plicks
Learn Sign Language Today

Learn Sign Language Today

From: existanz
Views: 22 Comments: 0
How To Learn Sign Language Easily - Become An Expert In No Time - http://eb63f9y85hmc7p1grxyc4dp7sg.hop.clickbank.net/
 
 Choosing an Online Program to Learn the Spanish Language

Choosing an Online Program to Learn the Spanish Language

From: desea
Views: 222 Comments: 0
Choosing an Online Program to Learn the Spanish Language
 
 Rocket Spanish - The New Spanish Language Learning Program

Rocket Spanish - The New Spanish Language Learning Program

From: adese
Views: 205 Comments: 0
Rocket Spanish - The New Spanish Language Learning Program
 
Spanish Language Learning Tools That Will Work For You

Spanish Language Learning Tools That Will Work For You

From: cruzdonrobert
Views: 3 Comments: 0
spanish language learn - http://tinyurl.com/default-rsp
 
Spanish Language Learning Tools That Will Work For You

Spanish Language Learning Tools That Will Work For You

From: cruzdonrobert
Views: 5 Comments: 0
spanish language learn - http://tinyurl.com/default-rsp
 
Language and Linguistics: The Key Concepts (Routledge Key Guides)

Language and Linguistics: The Key Concepts (Routledge Key Guides)

From: anon-389383
Views: 147 Comments: 0
Language and Linguistics: The Key Concepts (Routledge Key Guides) ,north shore library hawaii, free ebook the icebound land, simsbury library cy, paris harry goldberg american library pics
 
See all 
 
More from this user
Advertisement with Celebrities

Advertisement with Celebrities

From: Aznpho
Views: 3625
Comments: 0

The cave

The cave

From: Aznpho
Views: 1029
Comments: 0

See all 
 
 
 URL:          AddThis Social Bookmark Button
Embed Thin Player: (fits in most blogs)
Embed Full Player :
 
 

Name

Email (will NOT be shown to other users)

 

 
 
Comments: (watch)
 
 
Notes:
 
Slide 1: CS 2104 : Prog. Lang. Concepts. Functional Programming I Lecturer : Dr. Abhik Roychoudhury School of Computing From Dr. Khoo Siau Cheng’s lecture notes
Slide 2: Outline • • • • • What is Functional Programming? Basic Expressions Using Higher-order Functions List Processing Value and Type Constructions
Slide 3: Features of Functional Programming • • • • Expressions: The main construct in the language Functions : First-class citizens of the language Types : for specification and verification List Processing
Slide 4: Computation • Achieved via function application • Functions are mathematical functions without sideeffects. – Output is solely dependent of input. States Pure function Impure function with assignment
Slide 5: Outline • • • • • What is Functional Programming? Basic Expressions Using Higher-order Functions List Processing Value and Type Constructions
Slide 6: Basic SML Expressions <Exp> ::= <Constants> | <Identifiers> | <Exp1> <op> <Exp2> | | if <Exp0> then <Exp1> else <Exp2> | let {<Decl>} in <Exp> end | fn <Pattern> {<Pattern>} => <Exp> | <Exp1> <Exp2> | (<Exp1>, <Exp2> {, <Exp3>}) | <List-Exp> <Constants> ::= all constants <Identifiers> ::= all identifiers <op> ::= all binary operators
Slide 7: If-expression, Not If-statement if <e0> then <e1> else <e2> if (3 > 0) then 4+x else x-4 ; 4+x If-expression evaluates to a value.
Slide 8: Constructing a Linear List <List-Exp> ::=[[<Exp> {, <Exp>}] ] | nil | <Exp> :: <Exp> nil ; Note : A list must end with nil. 1::nil ; 1::(2::nil); (x+2)::(y-3)::(x*3)::nil ;
Slide 9: Constructing a Linear List <List-Exp> ::=[[<Exp> {, <Exp>}] ] | nil | <Exp> :: <Exp> nil ; Operator :: is right associative. 1::nil ; 1::(2::nil); (x+2)::(y-3)::(x*3)::nil ; head tail [] ; [1] ; [1,2]; [x+2,y-3,x*3] ;
Slide 10: Constructing a Tuple (<Exp> , <Exp> {, <Exp>}) Tuple is like a record without field names. (1,2) ; (1,2,True,4,False) ; (x+2,y=3,x*3) ;
Slide 11: Giving An Expression A Name Declaring an expression with a name enables easy reference. <decl> ::= val <pattern> = <exp> Identifiers are legally declared after proper pattern matching. val val val val x=3 (y,z) [a,b] [a,b] ; = (x+3,x-3) ; = [x+2,y-3] ; = [x+2] ; val (x::xs) = [1,2,3,4,5] ;
Slide 12: Pattern-Match a List val (x::xs) = [1,2,3,4,5] ; x 1 xs  [2,3,4,5] ; val (x::_::y::xs) = [1,2,3,4,5] ; x 1 y 3 xs  [4,5] ;
Slide 13: Local Declaration/Definition let {<decl>} in <exp> end let in end ; val x = (3,4) val (a,b) = x a+a*b 15 Identifiers are statically scoped
Slide 14: Nested bindings of same var. • Let val x =2 in let val x = x +1 in x*x end end • Let val x = 2 in let val y = x +1 in y * y end end • Let val x = 2 in (x+1)*(x+1) end •9
Slide 15: Function Declaration and Function Application <Decl> ::= fun <var> <para> = <exp> <para> ::= <pattern> {<pattern>} fun fac x = if (x > 0) then x * (fac (x-1)) else 1 fac 2 ⇒ if (2 > 0) then 2 * (fac (2-1)) else 1 ⇒ 2 * (fac 1) ⇒ 2 * (if (1 > 0) then 1 * (fac (1-1)) else 1) ⇒ 2 * (1 * (fac 0)) ⇒ 2 * (1 * 1) ⇒2
Slide 16: Function as Equations A function can be defined by a set of equations. <Decl> ::= fun <var> <para> = <exp> {| <var> <para> = <exp>} fun fac 0 | fac n =1 = n * (fac (n-1)) ⇒ 2 * (fac 1) ⇒ 2 * (1 * (fac 0)) ⇒2 Function application is accomplished via pattern matching. fac 2 ⇒ 2 * (fac (2-1)) ⇒ 2 * (1 * (fac (1-1))) ⇒ 2 * (1 * 1)
Slide 17: Outline • • • • • What is Functional Programming? Basic Expressions Using Higher-order Functions List Processing Value and Type Constructions
Slide 18: Functions as First-Class Citizens Lambda abstraction: A nameless function fn <para> => <Exp> (fn (x,y) => x + y) (2,3)  2+3  5 Definition Application val newfn = fn (x,y) => x + y ; newfn(2,4) + newfn(4,3)
Slide 19: Functions as First-Class Citizens Passing function as argument fun apply (f, x) = f x apply (fac, 3)   fac 3 6 apply (fn x => x*2, 3)  (fn x => x*2) 3  3*2 6
Slide 20: Functions as First-Class Citizens Returning function as result fun choose (x,f,g) = if x then f else g ; choose(a = b,fn x => x*2, fac)(4) returns either 8 or 24 fun compose (f,g) = fn x => f (g x) (compose (add3,fac)) 4  (fn x => add3 (fac x))(4)  (add3 (fac 4)) compose (f,g) is denoted as f o g  27
Slide 21: Functions as First-Class Citizens Storing function in data structure val flist = [ fac, fib, add3] ; let val [f1,f2,f3] = flist in (f1 2) + (f2 3) + (f3 4) end ;
Slide 22: Functions as Algorithms • A function describes a way for computation. • Self-Recursive function fun factorial (x) = if (x <= 1) then 1 else x * factorial (x-1) ; • Mutual-Recursive functions fun | | and even(0) = true even(1) = false even(x) = odd(x-1) odd(x) = even(x-1) ;
Slide 23: Passing Arguments to a Function How many argument does this function really take? fun f (x,y) = x + 2 * y ; a pair Calling f with argument (1,2) yields 5. fun g x y = x + 2 * y ; pattern 1 pattern 2 Calling g with arguments 1 and 2 yields 5.
Slide 24: Outline • • • • • What is Functional Programming? Basic Expressions Using Higher-order Functions List Processing Value and Type Constructions
Slide 25: Exploring a List fun length [] =0 | length (x::xs) = 1 + length(xs) ; length([10,10,10]) ==> ==> ==> ==> ==> 1 1 1 1 3 + + + + length([10,10]) 1 + length([10]) 1 + 1 + length([]) 1+1+0 Note how a list is being consumed from head to tail.
Slide 26: fun append([],ys) = ys | append(x::xs,ys) = x :: append(xs,ys); append([1,2],[3]) ==> 1::append([2],[3]) ==> 1::2::append([],[3]) ==> 1::2::[3] ==> [1,2,3] Note how a new list is being produced from head to tail. append(x,y) is denoted by x @ y.
Slide 27: fun rev(xs) = let fun r([],ys) = ys | r(x::xs,ys)= r(xs,x::ys) in r(xs,[])end rev([1,2,3]) ==> r([1,2,3],[]) ==> r([2,3],1::[]) ==> r([3],2::1::[]) ==> r([],3::2::1::[]) ==> [3,2,1] Note how lists are being produced and consumed concurrently.
Slide 28: Map operation map square [1,2,3,4] ==> [square 1, square 2,.., square 4] ==> [1,4,9,16] fun map f [] = [] | map f (x::xs) = (f x) :: (map f xs) map square [1,2] ==> (square 1) :: (map square [2]) ==> 1 :: (square 2) :: (map square []) ==> 1 :: 4 :: [] == [1,4]
Slide 29: Map operation fun map f [] = [] | map f (x::xs) = (f x) :: (map f xs) Law for Map : map f (map g list) = map (f o g) list map f (map g [a1,..,an]) = map f [g a1,..,g an] = [f (g a1),.., f (g an)] = [(f o g) a1,.., (f o g) an] = map (f o g) [a1,..an]
Slide 30: Reduce Operation reduce  [a1,..,an] a0 = a1  (a2  (..  (an  a0))) reduce f [a1,..,an] a0 = f(a1,f(a2,f(..,f(an,a0))))  : a1 a2 : : : an [] an a1 a2    a0
Slide 31: reduce (op *) [2,4,6] 1 ==> 2 * (4 * (6 * 1)) ==> 48 reduce (fn (x,y)=>1+y) [2,4,6] 0 ==> 1 + (1 + (1 + 0)) ==> 3 : 2 4 6 : : [] 1 1 1 + + + 0
Slide 32: Outline • • • • • What is Functional Programming? Basic Expressions Using Higher-order Functions List Processing Value and Type Constructions
Slide 33: Basic Types Type bool int real string Types: Classification of Values and Their Operators Values Operations true,false =, <>, … …,~1,0,1,2,… =,<>,<,+,div,… ..,0.0,.,3.14,.. =,<>,<,+,/,… “foo”,”\”q\””,…=,<>,… Boolean Operations: e1 andalso e2 e1 orelse e2
Slide 34: Types in ML • Every expression used in a program must be welltyped. – It is typable by the ML Type system. • Declaring a type : 3 : int [1,2] : int list • Usually, there is no need to declare the type in your program – ML infers it for you.
Slide 35: Structured Types Structured Types consist of structured values. • Structured values are built up through expressions. Eg : (2+3, square 3) • Structured types are denoted by type expressions. <type-expr> ::= <type-name> | <type-constant> | <type-expr> * <type-expr> | <type-expr> <type-expr> | <type-expr> list |…
Slide 36: Type of a Tuple (1,2) : int * int (3.14159, x+3,true) : real * int * bool A * B = set of ordered pairs (a,b) Data Type Constructor : Constructor : (,) * as in (a,b) as in A * B In general, (a1,a2,…,an) belongs to A1*A2*…*An.
Slide 37: Type of A List Type Constructor : list [1,2,3] : int list [3.14, 2.414] : real list [1, true, 3.14] : ?? Not well-typed!! A list = set of all lists of A -typed values. A in A-list refers to any types: (int*int) list : [ ], [(1,3)], [(3,3),(2,1)], … int list list : [ ], [[1,2]], [[1],[0,1,2],[2,3],…
Slide 38: Function Types Declaring domain & co-domain fac : int -> int A -> B = set of all functions from A to B. Type Constructor : Data Construction via : 1. Function declaration : 2. Lambda abstraction : -> fun f x = x + 1 ; fn x => x + 1; Value Selection via function application: f3  4 (fn x => x + 1) 3  4
Slide 39: Sum of Types Enumerated Types datatype Days New Type = Mo | Tu | We | Th | Fr | Sa | Su ; data / data constructors Selecting a summand via pattern matching: case d of Sa => “Go to cinema” | Su => “Extra Curriculum” | _ => “Life goes on”
Slide 40: Combining Sum and Product of Types: Algebraic Data Types Defining an integer binary tree: datatype IntTree = Leaf int | Node of (IntTree, int, IntTree) ; fun height (Leaf x) =0 | height (Node(t1,n,t2))= 1 + max(height(t1),height(t2)) ;
Slide 41: Conclusion • A functional program consists of an expression, not a sequence of statements. • Higher-order functions are first-class citizen in the language. – It can be nameless • List processing is convenient and expressive • In ML, every expression must be well-typed. • Algebraic data types empowers the language.

   
Time on Slide Time on Plick
Slides per Visit Slide Views Views by Location