programming languages 2nd edition tucker and noonan

18
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

Upload: lila-oconnor

Post on 01-Jan-2016

23 views

Category:

Documents


0 download

DESCRIPTION

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. Contents. 14.1 Functions and the Lambda Calculus 14.2 Scheme - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

Programming Languages2nd edition

Tucker and Noonan

Chapter 14Functional Programming

It is better to have 100 functions operate one one data structure, than 10 functions on 10 data structures.

A. Perlis

Page 2: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

Contents

14.1 Functions and the Lambda Calculus14.2 Scheme

14.2.1 Expressions14.2.2 Expression Evaluation14.2.3 Lists14.2.4 Elementary Values14.2.5 Control Flow14.2.6 Defining Functions14.2.7 Let Expressions14.2.8 Example: Semantics of Clite14.2.9 Example: Symbolic Differentiation14.2.10 Example: Eight Queens

14.3 Haskell

Page 3: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

Overview of Functional Languages

• They emerged in the 1960’s 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 function’s result

depends only upon the values of its parameters.

Page 4: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

14.1 Functions and the Lambda Calculus

The function Square has R (the reals) as domain and range.

Square : R R

Square(n) = n2

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 . x2 ) represents the Square function.

Page 5: Programming Languages 2nd edition Tucker and Noonan

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 . x2)5) = 52

Page 6: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

Function Evaluation

In pure lambda calculus, expressions like (( x . x2)5) = 52 are uninterpreted. In a functional language, (( x . x2)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

Page 7: Programming Languages 2nd edition Tucker and Noonan

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]

Page 8: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

14.2 Scheme

A derivative of LispOur subset:

– omits assignments– simulates looping via recursion– simulates blocks via functional composition

Scheme is Turing complete, butScheme programs have a different flavor

Page 9: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

14.2.1 Expressions

Cambridge prefix notation for all Scheme expressions:(f x1 x2 … xn)

E.g.,(+ 2 2) ; evaluates to 4(+ (* 5 4) (- 6 2)) ; means 5*4 + (6-2)(define (Square x) (* x x)) ; defines a function(define f 120) ; defines a global

Note: Scheme comments begin with ;

Page 10: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

14.2.2 Expression Evaluation

Three steps:1. Replace names of symbols by their current bindings.

2. Evaluate lists as function calls in Cambridge prefix.

3. Constants evaluate to themselves.E.g.,

x ; evaluates to 5

(+ (* x 4) (- 6 2)) ; evaluates to 24

5 ; evaluates to 5

‘red ; evaluates to ‘red

Page 11: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

14.2.3 Lists

A list is a series of expressions enclosed in parentheses.– Lists represent both functions and data.– The empty list is written (). – E.g., (0 2 4 6 8) is a list of even numbers. Here’s how it’s

stored:

Page 12: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

List Transforming Functions

Suppose we define the list evens to be (0 2 4 6 8). I.e., we write (define evens ‘(0 2 4 6 8)). Then:(car evens) ; gives 0(cdr evens) ; gives (2 4 6 8)(cons 1 (cdr evens)) ; gives (1 2 4 6 8)(null? ‘()) ; gives #t, or true(equal? 5 ‘(5)) ; gives #f, or false(append ‘(1 3 5) evens) ; gives (1 3 5 0 2 4 6 8)(list ‘(1 3 5) evens) ; gives ((1 3 5) (0 2 4 6 8))

Note: the last two lists are different!

Page 13: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

14.2.4 Elementary Values

Numbers

integers

floats

rationals

Symbols

Characters

Functions

Strings

(list? evens)

(symbol? ‘evens)

Page 14: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

14.2.5 Control Flow

Conditional(if (< x 0) (- 0 x)) ; if-then

(if (< x y) x y) ; if-then-else

Case selection(case month

((sep apr jun nov) 30)

((feb) 28)

(else 31)

)

Page 15: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

14.2.6 Defining Functions

( define ( name arguments ) function-body )

(define (min x y) (if (< x y) x y))

(define (abs x) (if (< x 0) (- 0 x) x))

(define (factorial n)

(if (< n 1) 1 (* n (factorial (- n 1)))

))

Note: be careful to match all parentheses.

Page 16: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

The subst Function

(define (subst y x alist)(if (null? alist) ‘())

(if (equal? x (car alist))(cons y (subst y x (cdr alist)))(cons (car alist) (subst y x (cdr alist)))

)))

E.g., (subst ‘x 2 ‘(1 (2 3) 2)) returns (1 (2 3) x)

Page 17: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

14.2.7 Let Expressions

Allows simplification of function definitions by defining intermediate expressions. E.g.,

(define (subst y x alist)(if (null? alist) ‘()

(let ((head (car alist)) (tail (cdr alist)))(if (equal? x head)

(cons y (subst y x tail))(cons head (subst y x tail))

)))

Page 18: Programming Languages 2nd edition Tucker and Noonan

Copyright © 2006 The McGraw-Hill Companies, Inc.

Functions as arguments

(define (mapcar fun alist)(if (null? alist) ‘()

(cons (fun (car alist))(mapcar fun (cdr alist)))

))

E.g., if (define (square x) (* x x)) then(mapcar square ‘(2 3 5 7 9)) returns(4 9 25 49 81)

F