We think you have liked this presentation. If you wish to download it, please recommend it to your friends in any social system. Share buttons are a little bit lower. Thank you!
Presentation is loading. Please wait.
Published byBrandon Salisbury
Modified over 2 years ago
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 14 Functional Programming It is better to have 100 functions operate one one data structure, than 10 functions on 10 data structures. A. Perlis
Copyright © 2006 The McGraw-Hill Companies, Inc. Contents 14.1 Functions and the Lambda Calculus 14.2 Scheme 14.3 Haskell Introduction Expressions Lists and List Comprehensions Elementary Types and Values Control Flow Defining Functions Tuples Example: Semantics of Clite Example: Symbolic Differentiation Example: Eight Queens
Copyright © 2006 The McGraw-Hill Companies, Inc. Overview of Functional Languages They emerged in the 1960s with Lisp Functional programming mirrors mathematical functions: domain = input, range = output Variables are mathematical symbols: not associated with memory locations. Pure functional programming is state-free: no assignment Referential transparency: a functions result depends only upon the values of its parameters.
Copyright © 2006 The McGraw-Hill Companies, Inc Functions and the Lambda Calculus The function Square has R (the reals) as domain and range. Square : R R Square(n) = n 2 A function is total if it is defined for all values of its domain. Otherwise, it is partial. E.g., Square is total. A lambda expression is a particular way to define a function: LambdaExpression variable | ( M N) | ( variable. M ) M LambdaExpression N LambdaExpression E.g., ( x. x 2 ) represents the Square function.
Copyright © 2006 The McGraw-Hill Companies, Inc. Properties of Lambda Expressions In ( x. M), x is bound. Other variables in M are free. A substitution of N for all occurrences of a variable x in M is written M[x N]. Examples: A beta reduction (( x. M)N) of the lambda expression ( x. M) is a substitution of all bound occurrences of x in M by N. E.g., (( x. x 2 )5) = 5 2
Copyright © 2006 The McGraw-Hill Companies, Inc. Function Evaluation In pure lambda calculus, expressions like (( x. x 2 )5) = 5 2 are uninterpreted. In a functional language, (( x. x 2 )5) is interpreted normally (25). Lazy evaluation = delaying argument evaluation in a function call until the argument is needed. –Advantage: flexibility Eager evaluation = evaluating arguments at the beginning of the call. –Advantage: efficiency
Copyright © 2006 The McGraw-Hill Companies, Inc. Status of Functions In imperative and OO programming, functions have different (lower) status than variables. In functional programming, functions have same status as variables; they are first-class entities. –They can be passed as arguments in a call. –They can transform other functions. A function that operates on other functions is called a functional form. E.g., we can define g(f, [x1, x2, … ]) = [f(x1), f(x2), …], so that g(Square, [2, 3, 5]) = [4, 9, 25]
Copyright © 2006 The McGraw-Hill Companies, Inc Haskell A more modern functional language Many similarities with Lisp and Scheme Key distinctions: Lazy Evaluation An Extensive Type System Cleaner syntax Notation closer to mathematics Infinite lists
Copyright © 2006 The McGraw-Hill Companies, Inc Introduction Minimal syntax for writing functions. E.g., -- two equivalent definitions of factorial fact1 n = if n==0 then 1 else n*fact2(n-1) fact2 n | n==0= 1 | otherwise = n*fact3(n-1) Note: Haskell comments begin with -- Infinite precision integers : > fact2 30 >
Copyright © 2006 The McGraw-Hill Companies, Inc Expressions Infix notation. E.g., 5*(4+6)-2-- evaluates to 48 5*4^2-2-- evaluates to 78 … or prefix notation. E.g., (-) ((*) 5 ((+) 4 6)) 2 Many operators: ! !! // ^ ** * / `div` `mod` `rem` `quot` + - : /= >= `elem` && ||
Copyright © 2006 The McGraw-Hill Companies, Inc Lists and List Comprehensions A list is a series of expressions separated by commas and enclosed in brackets. The empty list is written . evens = [0, 2, 4, 6, 8] declares a list of even numbers. evens = [0, 2.. 8] is equivalent. A list comprehension can be defined using a generator: moreevens = [2*x | x <- [0..10]] The condition that follows the vertical bar says, all integers x from 0 to 10. The symbol <- suggests set membership ( ).
Copyright © 2006 The McGraw-Hill Companies, Inc. Infinite Lists Generators may include additional conditions, as in: factors n = [f | f <- [1..n], n `mod` f == 0] This means all integers from 1 to n that divide f evenly. List comprehensions can also be infinite. E.g.: mostevens = [2*x | x <- [0,1..]] mostevens = [0,2..]
Copyright © 2006 The McGraw-Hill Companies, Inc. List Transforming Functions The operator : concatenates a new element onto the head of a list. E.g., 4:[6, 8] gives the list [4, 6, 8]. Suppose we define evens = [0, 2, 4, 6, 8]. Then: head evens -- gives 0 tail evens -- gives [2,4,6,8] head (tail evens)-- gives 2 tail (tail evens)-- gives [4,6,8] tail [6,8] -- gives  tail -- gives 
Copyright © 2006 The McGraw-Hill Companies, Inc. List Transforming Functions The operator ++ concatenates two lists. E.g., [2, 4]++[6, 8] gives the list [2, 4, 6, 8]. Here are some more functions on lists: null  -- gives True null evens -- gives False [1,2]==[1,2] -- gives True [1,2]==[2,1]-- gives False 5== -- gives an error (mismatched args) type evens -- gives [Int] (a list of integers)
Copyright © 2006 The McGraw-Hill Companies, Inc Elementary Types and Values Numbers integerstypes Int (finite; like int in C, Java) and Integer (infinitely many) floatstype Float Nmerical Functions abs, acos, atan, ceiling, floor, cos, sin log,logBase, pi, sqrt Booleans type Bool ; values True and False Characterstype Char ; e.g., `a`, `?` Stringstype String = [Char] ; e.g., hello
Copyright © 2006 The McGraw-Hill Companies, Inc Control Flow Conditional if x>=y && x>=z then x else if y>=x && y>=z then y else z Guarded command (used widely in defining functions) | x>=y && x>=z = x | y>=x && y>=z = y | otherwise = z
Copyright © 2006 The McGraw-Hill Companies, Inc Defining Functions A Haskell Function is defined by writing: its prototype (name, domain, and range) on the first line, and its parameters and body (meaning) on the remaining lines. max3 :: Int -> Int -> Int -> Int max3 x y z | x>=y && x>=z = x | y>=x && y>=z = y | otherwise = z Note: if the prototype is omitted, Haskell interpreter will infer it.
Copyright © 2006 The McGraw-Hill Companies, Inc. Functions are polymorphic Omitting the prototype gives the function its broadest possible meaning. E.g., max3 x y z | x>=y && x>=z = x | y>=x && y>=z = y | otherwise = z is now well-defined for any argument types: > max > max3 alpha beta gamma gamma
Copyright © 2006 The McGraw-Hill Companies, Inc Tuples A tuple is a collection of values of different types. Its values are surrounded by parens and separated by commas. E.g., (Bob, ) is a tuple. Tuple types can be defined by the types of their values. E.g., type Entry = (Person, Number) type Person = String type Number = String And lists of tuples be defined as well: type Phonebook = [(Person, Number)]
Copyright © 2006 The McGraw-Hill Companies, Inc. Functions on Tuples Standard functions on tuples (first and second members): fst (Bob, ) returns Bob snd (Bob, ) returns We can also define new functions like find to search a list of tuples: find :: Phonebook -> Person -> Number find pb p = [n | (person, n) <- pb, person == p] For instance, if: pb = [(Bob, ), (Allen, ), (Bob, )] then the call find pb Bob returns all of Bobs phone numbers: [ , ]
Copyright © 2006 The McGraw-Hill Companies, Inc. Functions as arguments Here is a function that applies another function to every member of a list, returning another list. maphead :: (a -> b) -> [a] -> [b] maphead fun alist = [ fun x | x <- alist ] E.g., if square x = x*x then maphead square [2,3,5,7,9] returns [4,9,25,49,81] F
Functional Programming Languages Session 12 Course : T Programming Language Concept Year : February 2011.
Chapter 7 Constructors and Other Tools. Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-2 Learning Objectives Constructors Definitions.
Chapter 11 Introduction to Programming in C. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display C: A High-Level.
A Third Look At ML 1. Outline More pattern matching Function values and anonymous functions Higher-order functions and currying Predefined higher-order.
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Introduction to Computer Science I Topic 4: Evaluation.
COMPILER CONSTRUCTION WEEK- 4: INTRODUCTION TO COMPILER & INTERPRETER.
Kathleen Fisher cs242 Reading: “Concepts in Programming Languages”, Chapter 6.
Copyright © 2003 Pearson Education, Inc. Slide 1.
Copyright © 2009 Elsevier Chapter 3:: Names, Scopes, and Bindings Programming Language Pragmatics Michael L. Scott.
Classes & Objects INTRODUCTION : This chapter introduces classes ; explains data hiding, abstraction & encapsulation and shows how a class implements these.
Programming Domains 1.Scientific Applications Typically, scientific applications have simple data structures but require large numbers of floating-point.
CSC 270 Nov. 22, 2005 Last Day of Scheme Dr. Stephen Bloch
C++ Programming: Program Design Including Data Structures, Fifth Edition Chapter 6: User-Defined Functions I.
Substitution & Evaluation Order cos 441 David Walker.
Introduction to Compilation of Functional Languages Wanhe Zhang Computing and Software Department McMaster University 16 th, March, 2004.
Haskell user defined types data Temp = Cold|Hot|Warm deriving (Show,Eq, Ord, Enum) -- to enable printing to screen -- comparing for equality -- comparison.
C-LISP. LISP 2 Lisp was invented by John McCarthy in 1958 while he was at the Massachusetts Institute of Technology (MIT).John McCarthyMassachusetts Institute.
Kurt Jensen Lars M. Kristensen 1 Coloured Petri Nets Department of Computer Science Coloured Petri Nets Modelling and Validation of Concurrent Systems.
C Language. Overview of C C is developed by Dennis Ritchie C is a structured programming language C supports functions that enables easy maintainability.
CS3012: Formal Languages and Compilers Static Analysis the last of the analysis phases of compilation type checking - is an operator applied to an incompatible.
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Introduction to Computer Science I Topic 11: From Scheme.
A container class is a data type that is capable of holding a collection of items. In C++, container classes can be implemented as a class, along with.
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 8 The Basics of Perl.
Names, Scope, Memory, and Binding. Name, Scope, and Binding A name is exactly what you think it is – Usually think of identifiers but can be more general.
Principles of Programming Chapter 7: Arrays In this chapter, you will learn about Introduction to Array Array declaration Array initialization Assigning.
Copyright © Cengage Learning. All rights reserved. 1.2 Functions.
Overview of programming in C C is a fast, efficient, flexible programming language Paradigm: C is procedural (like Fortran, Pascal), not object oriented.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 7 Semantics Surely all this is not without.
Chapter 5: Other Relational Languages Query-by-Example (QBE) Datalog.
© 2016 SlidePlayer.com Inc. All rights reserved.