160 likes | 325 Views
The College of Saint Rose CIS 433 – Programming Languages David Goldschmidt, Ph.D. Functional programming {week 12}. from Concepts of Programming Languages , 9th edition by Robert W. Sebesta, Addison-Wesley, 2010, ISBN 0-13-607347-6. Von Neumann architecture.
E N D
The College of Saint Rose CIS 433 – Programming Languages David Goldschmidt, Ph.D. Functional programming{week 12} from Concepts of Programming Languages, 9th edition by Robert W. Sebesta, Addison-Wesley, 2010, ISBN 0-13-607347-6
Von Neumann architecture • Imperative Languages • Data and programs are both stored in memory • Variables mimic memory • Assignment statements • Arithmetic operations • Iterative repetition • Control structures • etc.
Functional language design • The design of imperative languages is based directly on the von Neumann architecture • Efficiency is a primary concern • Variables are abstractions of memory locations • The design of functional languagesis based directly on mathematical functions • A solid theoretical basis more natural to users • Minimally concerned with machine architecture
Mathematical functions (i) • A mathematical function is a mapping ofmembers from one set (the domain) tomembers of another set (the range) • Parameters represent anymember of the domain • Once set, a parameter isfixedto represent exactly one value during the evaluation of the mapping expression # Python def cube( x ): return x * x * x
Mathematical functions (ii) • Mathematical functions define values whereas typical programming language functions producevalues function name function parameter(s) cube(x) ≡ x * x * x, where x is a real number “is defined as” mapping expression
Lambda expressions (i) • A lambda expression specifies the parameters and mapping expression of a function • Essentially a nameless function • During evaluation, parameter x is bound to a particular member of the domain # Python lambda x:x*x*x (x)x * x * x mapping expression function parameter(s)
Lambda expressions (ii) • The lambda expression is the function itself • Apply the expression to one or more parameters ((x)x * x * x)(4) # Python (lambda x:x*x*x)(4) ((x,y)x * y)(8,7) # Python (lambda x,y:x*y)(8,7)
Functional forms • A functional form is a higher-order function that either takes functions as parameters oryields functions as its results (or both) • Example: the apply-to-all(α) functional form cube(x) ≡ x * x * x, where x is a real number α( cube, (3, 5, 2) ) ===> (27, 125, 8) # Python map( cube, [3, 5, 2] ) map( math.sqrt, [2, 3, 4, 5] ) map( lambda x,y:x+y, [3, 4, 5], [6, 7, 8] )
Functional languages (i) • In imperative languages,operations are performedand results are stored invariables for later use • Management of variables is a constant concern and source of complexity (and bugs!) • Functions in imperative languagehave side effects
Functional languages (ii) • Functional programming languages mimicmathematical functions and mappings to the extent possible • The basic process of computationis fundamentally different than inimperative languages • No flow of control • No variables
Who needs variables? • Write a program to calculate n-factorial • The input argument n is your only variable { 1 if n=0 nxfactorial(n– 1) if n> 0 factorial(n) ≡
LISP (LISt Processing) • LISP is a functional language designedat MIT by John McCarthy in 1958 • Research in artificial intelligencerequired a language to: • Process data in dynamic lists • Support symbolic computation(rather than numeric)
LISP data structures • LISP has two data structures: • Atom: either a symbol or a numeric literal • List: a sequence of atoms and/or lists (A B C D) NIL (A (B C) D (E (F G)))
Scheme • Scheme was developed at MIT in the 1970s to be a cleaner and simpler version of LISP • Scheme uses an interpreter and built-in IDE • Literals evaluate to themselves • Scheme is available as Racketat http://racket-lang.org
What next? • Read and study Chapter 15 • Download Racket • Do Exercises at the end of Chapter 15