CS 476 Programming Language Design William Mansky Functional

  • Slides: 42
Download presentation
CS 476 – Programming Language Design William Mansky

CS 476 – Programming Language Design William Mansky

Functional Programming • Functions are the basic unit of computation • Functions are values!

Functional Programming • Functions are the basic unit of computation • Functions are values! (“first-class functions”) ― Functions can take functions as arguments • No mutable variables* • Usually contrasted with imperative languages • Examples: F#, OCaml, Lisp, Haskell, lambda-expressions 1

The First Functional Language • 2

The First Functional Language • 2

The First Functional Language • 3

The First Functional Language • 3

The First Functional Language • 4

The First Functional Language • 4

The First Functional Language • 5

The First Functional Language • 5

Lambda Calculus Basics • argument name “bound variable” 6

Lambda Calculus Basics • argument name “bound variable” 6

Lambda Calculus Basics • argument name “bound variable” 7

Lambda Calculus Basics • argument name “bound variable” 7

Lambda Calculus Basics • argument name “bound variable” 8

Lambda Calculus Basics • argument name “bound variable” 8

Variable Binding int f(int x){ return x + 1; } int x = 5;

Variable Binding int f(int x){ return x + 1; } int x = 5; f(x + 2); 9

Lambda Calculus: Binding and Scope • 10

Lambda Calculus: Binding and Scope • 10

Lambda Calculus: Renaming • 11

Lambda Calculus: Renaming • 11

Lambda Calculus: Renaming • 12

Lambda Calculus: Renaming • 12

Lambda Calculus: Renaming • 13

Lambda Calculus: Renaming • 13

Lambda Calculus: Substitution • 15

Lambda Calculus: Substitution • 15

Lambda Calculus: Substitution • 16

Lambda Calculus: Substitution • 16

Lambda Calculus: Substitution • 17

Lambda Calculus: Substitution • 17

Lambda Calculus: Substitution • 18

Lambda Calculus: Substitution • 18

Lambda Calculus: Substitution • 19

Lambda Calculus: Substitution • 19

Lambda Calculus: Substitution • 20

Lambda Calculus: Substitution • 20

Lambda Calculus: Substitution • 21

Lambda Calculus: Substitution • 21

Lambda Calculus: Substitution • 22

Lambda Calculus: Substitution • 22

Lambda Calculus: Substitution • 23

Lambda Calculus: Substitution • 23

Lambda Calculus: Substitution • 24

Lambda Calculus: Substitution • 24

Lambda Calculus: Substitution • 25

Lambda Calculus: Substitution • 25

Lambda Calculus: Substitution • except… 26

Lambda Calculus: Substitution • except… 26

Lambda Calculus: Substitution • except… 27

Lambda Calculus: Substitution • except… 27

Lambda Calculus: Substitution In OCaml: let f x y = x + y; ;

Lambda Calculus: Substitution In OCaml: let f x y = x + y; ; (* f = fun x -> fun y -> x + y *) let y = 5; ; let g = f y; ; (* g = fun y -> y + y would be wrong *) (* g = fun z -> 5 + z would be right *) 28

Lambda Calculus: Substitution • except… 29

Lambda Calculus: Substitution • except… 29

Lambda Calculus: Substitution • 30

Lambda Calculus: Substitution • 30

Lambda Calculus: Syntax • 32

Lambda Calculus: Syntax • 32

Lambda Calculus: Semantics • 33

Lambda Calculus: Semantics • 33

Lambda Calculus: Semantics • 34

Lambda Calculus: Semantics • 34

Lambda Calculus: Semantics • 35

Lambda Calculus: Semantics • 35

Lambda Calculus: Semantics • 36

Lambda Calculus: Semantics • 36

Call-By-Name vs. Call-By-Value • 37

Call-By-Name vs. Call-By-Value • 37

Call-By-Name vs. Call-By-Value • 38

Call-By-Name vs. Call-By-Value • 38

Call-By-Name vs. Call-By-Value • 39

Call-By-Name vs. Call-By-Value • 39

Lambda Calculus and Computability What can be computed? “Turing-complete” Church, 1936 Turing, 1936 40

Lambda Calculus and Computability What can be computed? “Turing-complete” Church, 1936 Turing, 1936 40