Kĩ thuật lập trình - Chapter 14: Functional programming

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.

ppt18 trang | Chia sẻ: huyhoang44 | Lượt xem: 599 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Kĩ thuật lập trình - Chapter 14: Functional programming, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Programming Languages 2nd edition Tucker and NoonanChapter 14Functional ProgrammingIt is better to have 100 functions operate one one data structure, than 10 functions on 10 data structures. A. PerlisContents14.1 Functions and the Lambda Calculus14.2 Scheme14.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 Queens14.3 HaskellOverview of Functional LanguagesThey emerged in the 1960’s with LispFunctional programming mirrors mathematical functions: domain = input, range = outputVariables are mathematical symbols: not associated with memory locations.Pure functional programming is state-free: no assignmentReferential transparency: a function’s result depends only upon the values of its parameters.14.1 Functions and the Lambda CalculusThe function Square has R (the reals) as domain and range. Square : R  R Square(n) = n2A 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  LambdaExpressionE.g., (  x . x2 ) represents the Square function.Properties of Lambda ExpressionsIn ( 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) = 52Function EvaluationIn 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: flexibilityEager evaluation = evaluating arguments at the beginning of the call.Advantage: efficiencyStatus of FunctionsIn 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]14.2 SchemeA derivative of LispOur subset:omits assignmentssimulates looping via recursionsimulates blocks via functional compositionScheme is Turing complete, butScheme programs have a different flavor14.2.1 ExpressionsCambridge 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 globalNote: Scheme comments begin with ;14.2.2 Expression EvaluationThree steps:Replace names of symbols by their current bindings.Evaluate lists as function calls in Cambridge prefix.Constants evaluate to themselves.E.g.,x ; evaluates to 5(+ (* x 4) (- 6 2)) ; evaluates to 24 ; evaluates to 5‘red ; evaluates to ‘red 14.2.3 ListsA 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: List Transforming FunctionsSuppose 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!14.2.4 Elementary ValuesNumbers integers floats rationalsSymbols CharactersFunctionsStrings (list? evens) (symbol? ‘evens) 14.2.5 Control FlowConditional(if (< x 0) (- 0 x)) ; if-then(if (< x y) x y) ; if-then-elseCase selection(case month ((sep apr jun nov) 30) ((feb) 28) (else 31)) 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.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)14.2.7 Let ExpressionsAllows 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)))))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

Các file đính kèm theo tài liệu này:

  • pptch14a_5155.ppt