# CS152: Programming Languages. Lecture 7 Lambda Calculus. Dan Grossman Spring 2011

Save this PDF as:

Size: px
Start display at page:

Download "CS152: Programming Languages. Lecture 7 Lambda Calculus. Dan Grossman Spring 2011"

## Transcription

1 CS152: Programming Languages Lecture 7 Lambda Calculus Dan Grossman Spring 2011

2 Where we are Done: Syntax, semantics, and equivalence For a language with little more than loops and global variables Now: Didn t IMP leave some things out? In particular: scope, functions, and data structures (Not to mention threads, I/O, exceptions, strings,...) Time for a new model... Dan Grossman CS152 Spring 2011, Lecture 7 2

3 Data + Code Higher-order functions work well for scope and data structures Scope: not all memory available to all code let x = 1 let add3 y = let z = 2 in x + y + z let seven = add3 4 Data: Function closures store data. Example: Association list let empty = (fun k -> raise Empty) let cons k v lst = (fun k -> if k =k then v else lst k ) let lookup k lst = lst k (Later: Objects do both too) Dan Grossman CS152 Spring 2011, Lecture 7 3

4 Adding data structures Extending IMP with data structures isn t too hard: e ::= c x e + e e e (e, e) e.1 e.2 v ::= c (v, v) H ::= H, x v H ; e c all old rules plus: H ; e 1 v 1 H ; e 2 v 2 H ; (e 1, e 2 ) (v 1, v 2 ) H ; e (v 1, v 2 ) H ; e.1 v 1 H ; e (v 1, v 2 ) H ; e.2 v 2 Notice: We allow pairs of values, not just pairs of integers We now have stuck programs (e.g., c.1) What would C++ do? Scheme? ML? Java? Perl? Division also causes stuckness Dan Grossman CS152 Spring 2011, Lecture 7 4

5 What about functions But adding functions (or objects) does not work well: e ::=... fun x -> s v ::=... fun x -> s s ::=... e(e) H ; e c H ; s H ; s Additions: H ; fun x -> s fun x -> s H ; e 1 fun x -> s H ; e 2 v H ; e 1 (e 2 ) H ; x := v; s Does this match the semantics we want for function calls? Dan Grossman CS152 Spring 2011, Lecture 7 5

6 What about functions But adding functions (or objects) does not work well: e ::=... fun x -> s v ::=... fun x -> s s ::=... e(e) H ; fun x -> s fun x -> s H ; e 1 fun x -> s H ; e 2 v H ; e 1 (e 2 ) H ; x := v; s NO: Consider x := 1; (fun x -> y := x)(2); ans := x. Scope matters; variable name doesn t. That is: Local variables should be local Choice of local-variable names should have only local ramifications Dan Grossman CS152 Spring 2011, Lecture 7 6

7 Another try H ; e 1 fun x -> s H ; e 2 v y fresh H ; e 1 (e 2 ) H ; y := x; x := v; s; x := y Dan Grossman CS152 Spring 2011, Lecture 7 7

8 Another try H ; e 1 fun x -> s H ; e 2 v y fresh H ; e 1 (e 2 ) H ; y := x; x := v; s; x := y fresh isn t very IMP-like but okay (think malloc) Dan Grossman CS152 Spring 2011, Lecture 7 7

9 Another try H ; e 1 fun x -> s H ; e 2 v y fresh H ; e 1 (e 2 ) H ; y := x; x := v; s; x := y fresh isn t very IMP-like but okay (think malloc) not a good match to how functions are implemented Dan Grossman CS152 Spring 2011, Lecture 7 7

10 Another try H ; e 1 fun x -> s H ; e 2 v y fresh H ; e 1 (e 2 ) H ; y := x; x := v; s; x := y fresh isn t very IMP-like but okay (think malloc) not a good match to how functions are implemented yuck: the way we want to think about something as fundamental as a call? Dan Grossman CS152 Spring 2011, Lecture 7 7

11 Another try H ; e 1 fun x -> s H ; e 2 v y fresh H ; e 1 (e 2 ) H ; y := x; x := v; s; x := y fresh isn t very IMP-like but okay (think malloc) not a good match to how functions are implemented yuck: the way we want to think about something as fundamental as a call? NO: wrong model for most functional and OO languages (Even wrong for C if s calls another function that accesses the global variable x) Dan Grossman CS152 Spring 2011, Lecture 7 7

12 The wrong model H ; e 1 fun x -> s H ; e 2 v y fresh H ; e 1 (e 2 ) H ; y := x; x := v; s; x := y f 1 := (fun x -> f 2 := (fun z -> ans := x + z)); f 1 (2); x := 3; f 2 (4) Should set ans to 6: f 1 (2) should assign to f 2 a function that adds 2 to its argument and stores result in ans Actually sets ans to 7: f 2 (2) assigns to f 2 a function that adds the current value of x to its argument Dan Grossman CS152 Spring 2011, Lecture 7 8

13 Punch line Cannot properly model local scope via a global heap of integers. Functions are not syntactic sugar for assignments to globals So let s build a new model that focuses on this essential concept (can add back IMP features later) Or just borrow a model from Alonzo Church And drop mutation, conditionals, integers (!), and loops (!) Dan Grossman CS152 Spring 2011, Lecture 7 9

14 The Lambda Calculus The Lambda Calculus: e ::= λx. e x e e v ::= λx. e You apply a function by substituting the argument for the bound variable (There is an equivalent environment definition not unlike heap-copying; see future homework) Dan Grossman CS152 Spring 2011, Lecture 7 10

15 Example Substitutions e ::= λx. e x e e v ::= λx. e Substitution is the key operation we were missing: (λx. x)(λy. y) (λy. y) (λx. λy. y x)(λz. z) (λy. y λz. z) (λx. x x)(λx. x x) (λx. x x)(λx. x x) After substitution, the bound variable is gone, so its name was irrelevant. (Good!) Dan Grossman CS152 Spring 2011, Lecture 7 11

16 A Programming Language Given substitution (e 1 [e 2 /x] = e 3 ), we can give a semantics: e e e[v/x] = e (λx. e) v e e 1 e 1 e 1 e 2 e 1 e 2 e 2 e 2 v e 2 v e 2 A small-step, call-by-value (CBV), left-to-right semantics Terminates when the whole program is some λx. e But (also) gets stuck when there s a free variable at top-level Won t cheat like we did with H(x) in IMP because scope is what we re interested in This is the heart of functional languages like Caml But real implementations don t substitute; they do something equivalent Dan Grossman CS152 Spring 2011, Lecture 7 12

17 Roadmap Motivation for a new model (done) CBV lambda calculus using substitution (done) Notes on concrete syntax Simple Lambda encodings (it s Turing complete!) Other reduction strategies Defining substitution Dan Grossman CS152 Spring 2011, Lecture 7 13

18 Concrete-Syntax Notes We (and Caml) resolve concrete-syntax ambiguities as follows: 1. λx. e 1 e 2 is (λx. e 1 e 2 ), not (λx. e 1 ) e 2 2. e 1 e 2 e 3 is (e 1 e 2 ) e 3, not e 1 (e 2 e 3 ) Convince yourself application is not associative More generally: 1. Function bodies extend to an unmatched right parenthesis Example: (λx. y(λz. z)w)q 2. Application associates to the left Example: e 1 e 2 e 3 e 4 is (((e 1 e 2 ) e 3 ) e 4 ) Like in IMP, assume we really have ASTs (with non-leaves labeled λ or application ) Rules may seem strange at first, but it s the most convenient concrete syntax Based on 70 years experience Dan Grossman CS152 Spring 2011, Lecture 7 14

19 Lambda Encodings Fairly crazy: we left out constants, conditionals, primitives, and data structures In fact, we re Turing complete and can encode whatever we need (just like assembly language can) Motivation for encodings: Fun and mind-expanding Shows we aren t oversimplifying the model ( numbers are syntactic sugar ) Can show languages are too expressive (e.g., unlimited C++ template instantiation) Encodings are also just (re)definition via translation Dan Grossman CS152 Spring 2011, Lecture 7 15

20 Encoding booleans The Boolean ADT There are two booleans and one conditional expression. The conditional takes 3 arguments (e.g., via currying). If the first is one boolean it evaluates to the second. If it s the other boolean it evaluates to the third. Dan Grossman CS152 Spring 2011, Lecture 7 16

21 Encoding booleans The Boolean ADT There are two booleans and one conditional expression. The conditional takes 3 arguments (e.g., via currying). If the first is one boolean it evaluates to the second. If it s the other boolean it evaluates to the third. Any set of three expressions meeting this specification is a proper encoding of booleans. Dan Grossman CS152 Spring 2011, Lecture 7 16

22 Encoding booleans The Boolean ADT There are two booleans and one conditional expression. The conditional takes 3 arguments (e.g., via currying). If the first is one boolean it evaluates to the second. If it s the other boolean it evaluates to the third. Any set of three expressions meeting this specification is a proper encoding of booleans. Here is one of an infinite number of encodings: true false if λx. λy. x λx. λy. y λb. λt. λf. b t f Example: if true v 1 v 2 v 1 Dan Grossman CS152 Spring 2011, Lecture 7 16

23 Evaluation Order Matters Careful: With CBV we need to thunk... diverges, but if true (λx. x) ((λx. x x)(λx. x x)) }{{} an infinite loop doesn t. if true (λx. x) (λz. ((λx. x x)(λx. x x)) z)) }{{} a value that when called diverges Dan Grossman CS152 Spring 2011, Lecture 7 17

24 Encoding Pairs The pair ADT : There is 1 constructor (taking 2 arguments) and 2 selectors 1st selector returns the 1st arg passed to the constructor 2nd selector returns the 2nd arg passed to the constructor Dan Grossman CS152 Spring 2011, Lecture 7 18

25 Encoding Pairs The pair ADT : There is 1 constructor (taking 2 arguments) and 2 selectors 1st selector returns the 1st arg passed to the constructor 2nd selector returns the 2nd arg passed to the constructor Example: mkpair λx. λy. λz. z x y fst λp. p(λx. λy. x) snd λp. p(λx. λy. y) snd ( fst ( mkpair ( mkpair v 1 v 2 ) v 3 )) v 2 Dan Grossman CS152 Spring 2011, Lecture 7 18

26 Reusing Lambdas Is it weird that the encodings of Booleans and pairs both used λx. λy. x and λx. λy. y for different purposes? Is it weird that the same bit-pattern in binary code can represent an int, a float, an instruction, or a pointer? Von Neumann: Bits can represent (all) code and data Church (?): Lambdas can represent (all) code and data Beware the Turing tarpit Dan Grossman CS152 Spring 2011, Lecture 7 19

27 Encoding Lists Rather than start from scratch, notice that booleans and pairs are enough to encode lists: Empty list is mkpair false false Non-empty list is λh. λt. mkpair true ( mkpair h t) Is-empty is... Head is... Tail is... Note: Not too far from how lists are implemented Taking tail ( tail empty ) will produce some lambda Just like, without page-protection hardware, null->tail->tail would produce some bit-pattern Dan Grossman CS152 Spring 2011, Lecture 7 20

28 Encoding Recursion Some programs diverge, but can we write useful loops? Yes! Dan Grossman CS152 Spring 2011, Lecture 7 21

29 Encoding Recursion Some programs diverge, but can we write useful loops? Yes! Write a function that takes an f and calls it in place of recursion Example (in enriched language): λf. λx. if (x = 0) then 1 else (x f(x 1)) Dan Grossman CS152 Spring 2011, Lecture 7 21

30 Encoding Recursion Some programs diverge, but can we write useful loops? Yes! Write a function that takes an f and calls it in place of recursion Example (in enriched language): λf. λx. if (x = 0) then 1 else (x f(x 1)) Then apply fix to it to get a recursive function: fix λf. λx. if (x = 0) then 1 else (x f(x 1)) Dan Grossman CS152 Spring 2011, Lecture 7 21

31 Encoding Recursion Some programs diverge, but can we write useful loops? Yes! Write a function that takes an f and calls it in place of recursion Example (in enriched language): λf. λx. if (x = 0) then 1 else (x f(x 1)) Then apply fix to it to get a recursive function: fix λf. λx. if (x = 0) then 1 else (x f(x 1)) fix λf. e reduces to something roughly equivalent to e[( fix λf. e)/f], which is unrolling the recursion once (and further unrollings will happen as necessary). Dan Grossman CS152 Spring 2011, Lecture 7 21

32 Encoding Recursion Some programs diverge, but can we write useful loops? Yes! Write a function that takes an f and calls it in place of recursion Example (in enriched language): λf. λx. if (x = 0) then 1 else (x f(x 1)) Then apply fix to it to get a recursive function: fix λf. λx. if (x = 0) then 1 else (x f(x 1)) fix λf. e reduces to something roughly equivalent to e[( fix λf. e)/f], which is unrolling the recursion once (and further unrollings will happen as necessary). The details, especially for CBV, are icky; the point is it s possible and you define fix only once Not on exam: fix λg. (λx. g (λy. x x y))(λx. g (λy. x x y)) Dan Grossman CS152 Spring 2011, Lecture 7 21

33 Encoding Arithmetic Over Natural Numbers How about arithmetic? Focus on non-negative numbers, addition, is-zero, etc. Dan Grossman CS152 Spring 2011, Lecture 7 22

34 Encoding Arithmetic Over Natural Numbers How about arithmetic? Focus on non-negative numbers, addition, is-zero, etc. How I would do it based on what we have so far: Lists of booleans for binary numbers Zero can be the empty list Use fix to implement adders, etc. Like in hardware except fixed-width avoids recursion Dan Grossman CS152 Spring 2011, Lecture 7 22

35 Encoding Arithmetic Over Natural Numbers How about arithmetic? Focus on non-negative numbers, addition, is-zero, etc. How I would do it based on what we have so far: Lists of booleans for binary numbers Zero can be the empty list Use fix to implement adders, etc. Like in hardware except fixed-width avoids recursion Or just use list length for a unary encoding Addition is list append Dan Grossman CS152 Spring 2011, Lecture 7 22

36 Encoding Arithmetic Over Natural Numbers How about arithmetic? Focus on non-negative numbers, addition, is-zero, etc. How I would do it based on what we have so far: Lists of booleans for binary numbers Zero can be the empty list Use fix to implement adders, etc. Like in hardware except fixed-width avoids recursion Or just use list length for a unary encoding Addition is list append But instead everybody always teaching Church numerals. Why? Tradition? Some sense of professional obligation? Better reason: You don t need fix: Basic arithmetic is often encodable in languages where all programs terminate In any case, we ll show some basics just for fun Dan Grossman CS152 Spring 2011, Lecture 7 22

37 Church Numerals 0 λs. λz. z 1 λs. λz. s z 2 λs. λz. s (s z) 3 λs. λz. s (s (s z))... Numbers encoded with two-argument functions The number i composes the first argument i times, starting with the second argument z stands for zero and s for successor (think unary) The trick is implementing arithmetic by cleverly passing the right arguments for s and z Dan Grossman CS152 Spring 2011, Lecture 7 23

38 Church Numerals 0 λs. λz. z 1 λs. λz. s z 2 λs. λz. s (s z) 3 λs. λz. s (s (s z)) successor λn. λs. λz. s (n s z) successor: take a number and return a number that (when called) applies s one more time Dan Grossman CS152 Spring 2011, Lecture 7 24

39 Church Numerals 0 λs. λz. z 1 λs. λz. s z 2 λs. λz. s (s z) 3 λs. λz. s (s (s z)) successor λn. λs. λz. s (n s z) plus λn. λm. λs. λz. n s (m s z) plus: take two numbers and return a number that uses one number as the zero argument for the other Dan Grossman CS152 Spring 2011, Lecture 7 25

40 Church Numerals 0 λs. λz. z 1 λs. λz. s z 2 λs. λz. s (s z) 3 λs. λz. s (s (s z)) successor λn. λs. λz. s (n s z) plus λn. λm. λs. λz. n s (m s z) times λn. λm. m ( plus n) zero times: take two numbers m and n and pass to m a function that adds n to its argument (so this will happen m times) and zero (where to start the m iterations of addition) Dan Grossman CS152 Spring 2011, Lecture 7 26

41 Church Numerals 0 λs. λz. z 1 λs. λz. s z 2 λs. λz. s (s z) 3 λs. λz. s (s (s z)) successor λn. λs. λz. s (n s z) plus λn. λm. λs. λz. n s (m s z) times λn. λm. m ( plus n) zero iszero λn. (λx. false ) true iszero: an easy one, see how the two arguments will lead to the correct answer Dan Grossman CS152 Spring 2011, Lecture 7 27

42 Church Numerals 0 λs. λz. z 1 λs. λz. s z 2 λs. λz. s (s z) 3 λs. λz. s (s (s z)) successor λn. λs. λz. s (n s z) plus λn. λm. λs. λz. n s (m s z) times λn. λm. m ( plus n) zero iszero λn. (λx. false ) true predecessor minus isequal (with 0 sticky) the hard one; see Wikipedia similar to times with pred instead of plus subtract and test for zero Dan Grossman CS152 Spring 2011, Lecture 7 28

43 Roadmap Motivation for a new model (done) CBV lambda calculus using substitution (done) Notes on concrete syntax (done) Simple Lambda encodings (it s Turing complete!) (done) Other reduction strategies Defining substitution Then start type systems Later take a break from types to consider first-class continuations and related topics Dan Grossman CS152 Spring 2011, Lecture 7 29

### Whereweare. CS-XXX: Graduate Programming Languages. Lecture 7 Lambda Calculus. Adding data structures. Data + Code. What about functions

Whereweare CS-XXX: Graduate Programming Languages Lecture 7 Lambda Calculus Done: Syntax, semantics, and equivalence For a language with little more than loops and global variables Now: Didn t IMP leave

### CIS 500 Software Foundations Fall September 25

CIS 500 Software Foundations Fall 2006 September 25 The Lambda Calculus The lambda-calculus If our previous language of arithmetic expressions was the simplest nontrivial programming language, then the

### Chapter 5: The Untyped Lambda Calculus

Chapter 5: The Untyped Lambda Calculus What is lambda calculus for? Basics: syntax and operational semantics Programming in the Lambda Calculus Formalities (formal definitions) What is Lambda calculus

### CIS 500 Software Foundations Midterm I Answer key October 8, 2003

CIS 500 Software Foundations Midterm I Answer key October 8, 2003 Inductive Definitions Review: Recall that the function size, which calculates the total number of nodes in the abstract syntax tree of

### More Lambda Calculus and Intro to Type Systems

More Lambda Calculus and Intro to Type Systems Plan Heavy Class Participation Thus, wake up! Lambda Calculus How is it related to real life? Encodings Fixed points Type Systems Overview Static, Dyamic

### CIS 500 Software Foundations Midterm I

CIS 500 Software Foundations Midterm I October 11, 2006 Name: Student ID: Email: Status: Section: registered for the course not registered: sitting in to improve a previous grade not registered: just taking

### Review. CS152: Programming Languages. Lecture 11 STLC Extensions and Related Topics. Let bindings (CBV) Adding Stuff. Booleans and Conditionals

Review CS152: Programming Languages Lecture 11 STLC Extensions and Related Topics e ::= λx. e x ee c v ::= λx. e c (λx. e) v e[v/x] e 1 e 2 e 1 e 2 τ ::= int τ τ Γ ::= Γ,x : τ e 2 e 2 ve 2 ve 2 e[e /x]:

### Functional Languages and Higher-Order Functions

Functional Languages and Higher-Order Functions Leonidas Fegaras CSE 5317/4305 L12: Higher-Order Functions 1 First-Class Functions Values of some type are first-class if They can be assigned to local variables

### 9/23/2014. Why study? Lambda calculus. Church Rosser theorem Completeness of Lambda Calculus: Turing Complete

Dr A Sahu Dept of Computer Science & Engineering IIT Guwahati Why study? Lambda calculus Syntax Evaluation Relationship to programming languages Church Rosser theorem Completeness of Lambda Calculus: Turing

### More Lambda Calculus and Intro to Type Systems

#1 More Lambda Calculus and Intro to Type Systems #2 Plan Heavy Class Participation Thus, wake up! (not actually kidding) Lambda Calculus How is it related to real life? Encodings Fixed points Type Systems

### COMP 1130 Lambda Calculus. based on slides by Jeff Foster, U Maryland

COMP 1130 Lambda Calculus based on slides by Jeff Foster, U Maryland Motivation Commonly-used programming languages are large and complex ANSI C99 standard: 538 pages ANSI C++ standard: 714 pages Java

### λ calculus Function application Untyped λ-calculus - Basic Idea Terms, Variables, Syntax β reduction Advanced Formal Methods

Course 2D1453, 2006-07 Advanced Formal Methods Lecture 2: Lambda calculus Mads Dam KTH/CSC Some material from B. Pierce: TAPL + some from G. Klein, NICTA Alonzo Church, 1903-1995 Church-Turing thesis First

### Polymorphic lambda calculus Princ. of Progr. Languages (and Extended ) The University of Birmingham. c Uday Reddy

06-02552 Princ. of Progr. Languages (and Extended ) The University of Birmingham Spring Semester 2016-17 School of Computer Science c Uday Reddy2016-17 Handout 6: Polymorphic Type Systems 1. Polymorphic

### Formal Semantics. Aspects to formalize. Lambda calculus. Approach

Formal Semantics Aspects to formalize Why formalize? some language features are tricky, e.g. generalizable type variables, nested functions some features have subtle interactions, e.g. polymorphism and

### CMSC 336: Type Systems for Programming Languages Lecture 4: Programming in the Lambda Calculus Acar & Ahmed 22 January 2008.

CMSC 336: Type Systems for Programming Languages Lecture 4: Programming in the Lambda Calculus Acar & Ahmed 22 January 2008 Contents 1 Announcements 1 2 Solution to the Eercise 1 3 Introduction 1 4 Multiple

### Organization of Programming Languages CS3200/5200N. Lecture 11

Organization of Programming Languages CS3200/5200N Razvan C. Bunescu School of Electrical Engineering and Computer Science bunescu@ohio.edu Functional vs. Imperative The design of the imperative languages

### Introduction to the λ-calculus

Announcements Prelim #2 issues: o Problem 5 grading guide out shortly o Problem 3 (hashing) issues Will be on final! Friday RDZ office hours are 11-12 not 1:30-2:30 1 Introduction to the λ-calculus Today

### INF 212 ANALYSIS OF PROG. LANGS LAMBDA CALCULUS. Instructors: Crista Lopes Copyright Instructors.

INF 212 ANALYSIS OF PROG. LANGS LAMBDA CALCULUS Instructors: Crista Lopes Copyright Instructors. History Formal mathematical system Simplest programming language Intended for studying functions, recursion

### Intro. Scheme Basics. scm> 5 5. scm>

Intro Let s take some time to talk about LISP. It stands for LISt Processing a way of coding using only lists! It sounds pretty radical, and it is. There are lots of cool things to know about LISP; if

### Constraint-based Analysis. Harry Xu CS 253/INF 212 Spring 2013

Constraint-based Analysis Harry Xu CS 253/INF 212 Spring 2013 Acknowledgements Many slides in this file were taken from Prof. Crista Lope s slides on functional programming as well as slides provided by

### CMSC330. Objects, Functional Programming, and lambda calculus

CMSC330 Objects, Functional Programming, and lambda calculus 1 OOP vs. FP Object-oriented programming (OOP) Computation as interactions between objects Objects encapsulate mutable data (state) Accessed

### SCHEME 7. 1 Introduction. 2 Primitives COMPUTER SCIENCE 61A. October 29, 2015

SCHEME 7 COMPUTER SCIENCE 61A October 29, 2015 1 Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write Scheme programs,

### Racket. CSE341: Programming Languages Lecture 14 Introduction to Racket. Getting started. Racket vs. Scheme. Example.

Racket Next 2+ weeks will use the Racket language (not ML) and the DrRacket programming environment (not emacs) Installation / basic usage instructions on course website CSE34: Programming Languages Lecture

### CMSC 330: Organization of Programming Languages

CMSC 330: Organization of Programming Languages Lambda Calculus Encodings CMSC 330 Spring 2017 1 Review A lambda calculus expression is defined as e ::= x variable λx.e abstraction (fun def) e e application

### CSci 4223 Lecture 12 March 4, 2013 Topics: Lexical scope, dynamic scope, closures

CSci 4223 Lecture 12 March 4, 2013 Topics: Lexical scope, dynamic scope, closures 1 Lexical Scope SML, and nearly all modern languages, follow the Rule of Lexical Scope: the body of a function is evaluated

### CMSC 330: Organization of Programming Languages. Lambda Calculus Encodings

CMSC 330: Organization of Programming Languages Lambda Calculus Encodings CMSC330 Spring 2018 1 The Power of Lambdas Despite its simplicity, the lambda calculus is quite expressive: it is Turing complete!

### Functional abstraction. What is abstraction? Eating apples. Readings: HtDP, sections Language level: Intermediate Student With Lambda

Functional abstraction Readings: HtDP, sections 19-24. Language level: Intermediate Student With Lambda different order used in lecture section 24 material introduced much earlier sections 22, 23 not covered

### CSE 341: Programming Languages

CSE 341: Programming Languages Dan Grossman Spring 2008 Lecture 6 Nested pattern-matching; course motivation Dan Grossman CSE341 Spring 2008, Lecture 6 1 Patterns What we know: case-expresssions do pattern-matching

### CS Lecture 6: Map and Fold. Prof. Clarkson Spring Today s music: Selections from the soundtrack to 2001: A Space Odyssey

CS 3110 Lecture 6: Map and Fold Prof. Clarkson Spring 2015 Today s music: Selections from the soundtrack to 2001: A Space Odyssey Review Course so far: Syntax and semantics of (most of) OCaml Today: No

### Fall 2017 Discussion 7: October 25, 2017 Solutions. 1 Introduction. 2 Primitives

CS 6A Scheme Fall 207 Discussion 7: October 25, 207 Solutions Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write

### Types for References, Exceptions and Continuations. Review of Subtyping. Γ e:τ τ <:σ Γ e:σ. Annoucements. How s the midterm going?

Types for References, Exceptions and Continuations Annoucements How s the midterm going? Meeting 21, CSCI 5535, Spring 2009 2 One-Slide Summary Review of Subtyping If τ is a subtype of σ then any expression

### Recursion. Lecture 6: More Lambda Calculus Programming. Fixed Points. Recursion

Recursion Lecture 6: More Lambda Calculus Programming CSC 131! Fall, 2014!! Kim Bruce Recursive definitions are handy! - fact = λn. cond (iszero n) 1 (Mult n (fact (Pred n)))! - Not a legal definition

### Fundamentals of Artificial Intelligence COMP221: Functional Programming in Scheme (and LISP)

Fundamentals of Artificial Intelligence COMP221: Functional Programming in Scheme (and LISP) Prof. Dekai Wu Department of Computer Science and Engineering The Hong Kong University of Science and Technology

### Introduction to the Lambda Calculus. Chris Lomont

Introduction to the Lambda Calculus Chris Lomont 2010 2011 2012 www.lomont.org Leibniz (1646-1716) Create a universal language in which all possible problems can be stated Find a decision method to solve

### Fundamental Concepts. Chapter 1

Chapter 1 Fundamental Concepts This book is about the mathematical foundations of programming, with a special attention on computing with infinite objects. How can mathematics help in programming? There

### 1998 Midterm and Solutions

6.821 Programming Languages Handout Fall 2002 MASSACHVSETTS INSTITVTE OF TECHNOLOGY Department of Electrical Engineering and Compvter Science 1998 Midterm and Solutions There are four problems on this

### COMP80 Lambda Calculus Programming Languages Slides Courtesy of Prof. Sam Guyer Tufts University Computer Science History Big ideas Examples:

COMP80 Programming Languages Slides Courtesy of Prof. Sam Guyer Lambda Calculus Formal system with three parts Notation for functions Proof system for equations Calculation rules called reduction Idea:

### 1 Scope, Bound and Free Occurrences, Closed Terms

CS 6110 S18 Lecture 2 The λ-calculus Last time we introduced the λ-calculus, a mathematical system for studying the interaction of functional abstraction and functional application. We discussed the syntax

### Chapter 2 The Language PCF

Chapter 2 The Language PCF We will illustrate the various styles of semantics of programming languages with an example: the language PCF Programming language for computable functions, also called Mini-ML.

### Operational Semantics. One-Slide Summary. Lecture Outline

Operational Semantics #1 One-Slide Summary Operational semantics are a precise way of specifying how to evaluate a program. A formal semantics tells you what each expression means. Meaning depends on context:

### CS 125 Section #4 RAMs and TMs 9/27/16

CS 125 Section #4 RAMs and TMs 9/27/16 1 RAM A word-ram consists of: A fixed set of instructions P 1,..., P q. Allowed instructions are: Modular arithmetic and integer division on registers; the standard

### Design Issues. Subroutines and Control Abstraction. Subroutines and Control Abstraction. CSC 4101: Programming Languages 1. Textbook, Chapter 8

Subroutines and Control Abstraction Textbook, Chapter 8 1 Subroutines and Control Abstraction Mechanisms for process abstraction Single entry (except FORTRAN, PL/I) Caller is suspended Control returns

### Abstract register machines Lecture 23 Tuesday, April 19, 2016

Harvard School of Engineering and Applied Sciences CS 152: Programming Languages Lecture 23 Tuesday, April 19, 2016 1 Why abstract machines? So far in the class, we have seen a variety of language features.

### Warm-up and Memoization

CSE341 Spring 05 Due Wednesday, May 11 Assignment 4 Part I Warm-up and Memoization Warm-up As a warm-up, write the following Scheme functions: 1. Write the function foldl of the form (foldl func initial

### PROGRAMMING IN HASKELL. Chapter 2 - First Steps

PROGRAMMING IN HASKELL Chapter 2 - First Steps 0 The Hugs System Hugs is an implementation of Haskell 98, and is the most widely used Haskell system; The interactive nature of Hugs makes it well suited

### Project 2: Scheme Interpreter

Project 2: Scheme Interpreter CSC 4101, Fall 2017 Due: 12 November 2017 For this project, you will implement a simple Scheme interpreter in C++ or Java. Your interpreter should be able to handle the same

### Harvard School of Engineering and Applied Sciences CS 152: Programming Languages

Harvard School of Engineering and Applied Sciences CS 152: Programming Languages Lecture 14 Tuesday, March 24, 2015 1 Parametric polymorphism Polymorph means many forms. Polymorphism is the ability of

### Lecture 9: Typed Lambda Calculus

Advanced Topics in Programming Languages Spring Semester, 2012 Lecture 9: Typed Lambda Calculus May 8, 2012 Lecturer: Mooly Sagiv Scribe: Guy Golan Gueta and Shachar Itzhaky 1 Defining a Type System for

### Introduction to Functional Programming in Haskell 1 / 56

Introduction to Functional Programming in Haskell 1 / 56 Outline Why learn functional programming? The essence of functional programming What is a function? Equational reasoning First-order vs. higher-order

### CS Lecture 6: Map and Fold. Prof. Clarkson Fall Today s music: Selections from the soundtrack to 2001: A Space Odyssey

CS 3110 Lecture 6: Map and Fold Prof. Clarkson Fall 2014 Today s music: Selections from the soundtrack to 2001: A Space Odyssey Review Features so far: variables, operators, let expressions, if expressions,

### Part I. Historical Origins

Introduction to the λ-calculus Part I CS 209 - Functional Programming Dr. Greg Lavender Department of Computer Science Stanford University Historical Origins Foundations of Mathematics (1879-1936) Paradoxes

### Types, Type Inference and Unification

Types, Type Inference and Unification Mooly Sagiv Slides by Kathleen Fisher and John Mitchell Cornell CS 6110 Summary (Functional Programming) Lambda Calculus Basic ML Advanced ML: Modules, References,

### Scheme. Functional Programming. Lambda Calculus. CSC 4101: Programming Languages 1. Textbook, Sections , 13.7

Scheme Textbook, Sections 13.1 13.3, 13.7 1 Functional Programming Based on mathematical functions Take argument, return value Only function call, no assignment Functions are first-class values E.g., functions

### CS 4110 Programming Languages & Logics. Lecture 27 Recursive Types

CS 4110 Programming Languages & Logics Lecture 27 Recursive Types 4 November 2016 Announcements 2 My office hours are at the normal time today but canceled on Monday Guest lecture by Seung Hee Han on Monday

### Functional Programming. Pure Functional Languages

Functional Programming Pure functional PLs S-expressions cons, car, cdr Defining functions read-eval-print loop of Lisp interpreter Examples of recursive functions Shallow, deep Equality testing 1 Pure

### Lecture Outline. COOL operational semantics. Operational Semantics of Cool. Motivation. Lecture 13. Notation. The rules. Evaluation Rules So Far

Lecture Outline Operational Semantics of Cool Lecture 13 COOL operational semantics Motivation Notation The rules Prof. Aiken CS 143 Lecture 13 1 Prof. Aiken CS 143 Lecture 13 2 Motivation We must specify

### CS1102: Macros and Recursion

CS1102: Macros and Recursion Kathi Fisler, WPI October 5, 2009 This lecture looks at several more macro examples. It aims to show you when you can use recursion safely with macros and when you can t. 1

### CS 360: Programming Languages Lecture 12: More Haskell

CS 360: Programming Languages Lecture 12: More Haskell Geoffrey Mainland Drexel University Adapted from Brent Yorgey s course Introduction to Haskell. Section 1 Administrivia Administrivia Homework 5 due

### Values and Variables 1 / 30

Values and Variables 1 / 30 Values 2 / 30 Computing Computing is any purposeful activity that marries the representation of some dynamic domain with the representation of some dynamic machine that provides

### CS 220: Introduction to Parallel Computing. Arrays. Lecture 4

CS 220: Introduction to Parallel Computing Arrays Lecture 4 Note: Windows I updated the VM image on the website It now includes: Sublime text Gitkraken (a nice git GUI) And the git command line tools 1/30/18

### Getting Started with Haskell (10 points)

Massachusetts Institute of Technology Department of Electrical Engineering and Computer Science 6.827 Multithreaded Parallelism: Languages and Compilers Problem Set 1 Out: September 19, 2006 Due: October

### The Metalanguage λprolog and Its Implementation

The Metalanguage λprolog and Its Implementation Gopalan Nadathur Computer Science Department University of Minnesota (currently visiting INRIA and LIX) 1 The Role of Metalanguages Many computational tasks

### Programming Languages. Function-Closure Idioms. Adapted from Dan Grossman's PL class, U. of Washington

Programming Languages Function-Closure Idioms Adapted from Dan Grossman's PL class, U. of Washington More idioms We know the rule for lexical scope and function closures Now what is it good for A partial

### Lists. Michael P. Fourman. February 2, 2010

Lists Michael P. Fourman February 2, 2010 1 Introduction The list is a fundamental datatype in most functional languages. ML is no exception; list is a built-in ML type constructor. However, to introduce

### QUIZ How do we implement run-time constants and. compile-time constants inside classes?

QUIZ How do we implement run-time constants and compile-time constants inside classes? Compile-time constants in classes The static keyword inside a class means there s only one instance, regardless of

### λ calculus is inconsistent

Content Rough timeline COMP 4161 NICTA Advanced Course Advanced Topics in Software Verification Gerwin Klein, June Andronick, Toby Murray λ Intro & motivation, getting started [1] Foundations & Principles

### Implementing functional languages with abstract machines

Implementing functional languages with abstract machines Hayo Thielecke University of Birmingham http://www.cs.bham.ac.uk/~hxt December 9, 2015 Contents Introduction Lambda calculus and programming languages

### Project 4 Due 11:59:59pm Thu, May 10, 2012

Project 4 Due 11:59:59pm Thu, May 10, 2012 Updates Apr 30. Moved print() method from Object to String. Apr 27. Added a missing case to assembler.ml/build constants to handle constant arguments to Cmp.

### Motivation was to facilitate development of systems software, especially OS development.

A History Lesson C Basics 1 Development of language by Dennis Ritchie at Bell Labs culminated in the C language in 1972. Motivation was to facilitate development of systems software, especially OS development.

### Lambda Calculus-2. Church Rosser Property

Lambda Calculus-2 Church-Rosser theorem Supports referential transparency of function application Says if it exists, normal form of a term is UNIQUE 1 Church Rosser Property Fundamental result of λ-calculus:

### SOFTWARE ARCHITECTURE 6. LISP

1 SOFTWARE ARCHITECTURE 6. LISP Tatsuya Hagino hagino@sfc.keio.ac.jp slides URL https://vu5.sfc.keio.ac.jp/sa/ 2 Compiler vs Interpreter Compiler Translate programs into machine languages Compilers are

### 301AA - Advanced Programming [AP-2017]

301AA - Advanced Programming [AP-2017] Lecturer: Andrea Corradini andrea@di.unipi.it Tutor: Lillo GalleBa galleba@di.unipi.it Department of Computer Science, Pisa Academic Year 2017/18 AP-2017-15: Func'onal

### Crit-bit Trees. Adam Langley (Version )

CRITBIT CWEB OUTPUT 1 Crit-bit Trees Adam Langley (agl@imperialviolet.org) (Version 20080926) 1. Introduction This code is taken from Dan Bernstein s qhasm and implements a binary crit-bit (alsa known

### CS61A Discussion Notes: Week 11: The Metacircular Evaluator By Greg Krimer, with slight modifications by Phoebus Chen (using notes from Todd Segal)

CS61A Discussion Notes: Week 11: The Metacircular Evaluator By Greg Krimer, with slight modifications by Phoebus Chen (using notes from Todd Segal) What is the Metacircular Evaluator? It is the best part

Advances in Programming Languages Lecture 4: Higher Polymorphism Ian Stark School of Informatics The University of Edinburgh Friday 30 September 2016 Semester 1 Week 2 https://blog.inf.ed.ac.uk/apl16 Topic:

### (Provisional) Lecture 22: Rackette Overview, Binary Tree Analysis 10:00 AM, Oct 27, 2017

Integrated Introduction to Computer Science Hughes (Provisional) Lecture 22: Rackette Overview, Binary Tree Analysis 10:00 Contents 1 Announcements 1 2 An OCaml Debugging Tip 1 3 Introduction to Rackette

### Getting Started with Haskell (10 points)

Massachusetts Institute of Technology Department of Electrical Engineering and Computer Science 6.820 Foundations of Program Analysis Problem Set 1 Out: September 9, 2015 Due: September 22, 2015 at 5 PM

### Stop coding Pascal. Saturday, April 6, 13

Stop coding Pascal...emotional sketch about past, present and future of programming languages, Python, compilers, developers, Life, Universe and Everything Alexey Kachayev CTO at KitApps Inc. Open source

### CS 61B Discussion 5: Inheritance II Fall 2014

CS 61B Discussion 5: Inheritance II Fall 2014 1 WeirdList Below is a partial solution to the WeirdList problem from homework 3 showing only the most important lines. Part A. Complete the implementation

### Type Checking and Type Inference

Type Checking and Type Inference Principles of Programming Languages CSE 307 1 Types in Programming Languages 2 Static Type Checking 3 Polymorphic Type Inference Version: 1.8 17:20:56 2014/08/25 Compiled

### Lambda calculus. Chapter 2

Chapter 2 Lambda calculus The lambda calculus serves as the basis of most functional programming languages. More accurately, we might say that functional programming languages are based on the lambda calculi

### And Parallelism. Parallelism in Prolog. OR Parallelism

Parallelism in Prolog And Parallelism One reason that Prolog is of interest to computer scientists is that its search mechanism lends itself to parallel evaluation. In fact, it supports two different kinds

### COMP combinational logic 1 Jan. 18, 2016

In lectures 1 and 2, we looked at representations of numbers. For the case of integers, we saw that we could perform addition of two numbers using a binary representation and using the same algorithm that

### Lambda Calculus. Type Systems, Lectures 3. Jevgeni Kabanov Tartu,

Lambda Calculus Type Systems, Lectures 3 Jevgeni Kabanov Tartu, 13.02.2006 PREVIOUSLY ON TYPE SYSTEMS Arithmetical expressions and Booleans Evaluation semantics Normal forms & Values Getting stuck Safety

### Begin at the beginning

Begin at the beginning Expressions (Syntax) Exec-time Dynamic Values (Semantics) Compile-time Static Types 1. Programmer enters expression 2. ML checks if expression is well-typed Using a precise set of

### Dialects of ML. CMSC 330: Organization of Programming Languages. Dialects of ML (cont.) Features of ML. Functional Languages. Features of ML (cont.

CMSC 330: Organization of Programming Languages OCaml 1 Functional Programming Dialects of ML ML (Meta Language) Univ. of Edinburgh,1973 Part of a theorem proving system LCF The Logic of Computable Functions

### Dynamic Types , Spring March 21, 2017

Dynamic Types 15-312, Spring 2017 March 21, 2017 Announcements Homework 4 will be released shortly. Most of it is new, so it s hard to tell how hard we made it. Please start early! Look at what I made

### Sprite an animation manipulation language Language Reference Manual

Sprite an animation manipulation language Language Reference Manual Team Leader Dave Smith Team Members Dan Benamy John Morales Monica Ranadive Table of Contents A. Introduction...3 B. Lexical Conventions...3

### Fundamentals. Fundamentals. Fundamentals. We build up instructions from three types of materials

Fundamentals We build up instructions from three types of materials Constants Expressions Fundamentals Constants are just that, they are values that don t change as our macros are executing Fundamentals

### Programming with Math and Logic

.. Programming with Math and Logic an invitation to functional programming Ed Morehouse Wesleyan University The Plan why fp? terms types interfaces The What and Why of Functional Programming Computing

### Project 5 - The Meta-Circular Evaluator

MASSACHVSETTS INSTITVTE OF TECHNOLOGY Department of Electrical Engineering and Computer Science 6.001 Structure and Interpretation of Computer Programs Fall Semester, 2005 Project 5 - The Meta-Circular

### Lambda Calculus.

Lambda Calculus Oded Padon & Mooly Sagiv (original slides by Kathleen Fisher, John Mitchell, Shachar Itzhaky, S. Tanimoto, Stephen A. Edwards) Benjamin Pierce Types and Programming Languages http://www.cs.cornell.edu/courses/cs3110/2008fa/recitations/rec26.html

### Scheme: Data. CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Monday, April 3, Glenn G.

Scheme: Data CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Monday, April 3, 2017 Glenn G. Chappell Department of Computer Science University of Alaska Fairbanks ggchappell@alaska.edu

### QUIZ. What is wrong with this code that uses default arguments?

QUIZ What is wrong with this code that uses default arguments? Solution The value of the default argument should be placed in either declaration or definition, not both! QUIZ What is wrong with this code

### Conversion vs. Subtyping. Lecture #23: Conversion and Type Inference. Integer Conversions. Conversions: Implicit vs. Explicit. Object x = "Hello";

Lecture #23: Conversion and Type Inference Administrivia. Due date for Project #2 moved to midnight tonight. Midterm mean 20, median 21 (my expectation: 17.5). In Java, this is legal: Object x = "Hello";

### cs242 Kathleen Fisher Reading: Concepts in Programming Languages, Chapter 6 Thanks to John Mitchell for some of these slides.

cs242 Kathleen Fisher Reading: Concepts in Programming Languages, Chapter 6 Thanks to John Mitchell for some of these slides. We are looking for homework graders. If you are interested, send mail to cs242cs.stanford.edu

### Part I. Language Core

Part I Language Core 7 The first part of this book is a complete introduction to the core of the Objective Caml language, in particular the expression evaluation mechanism, static typing and the data

### OCaml Language Choices CMSC 330: Organization of Programming Languages

OCaml Language Choices CMSC 330: Organization of Programming Languages! Implicit or explicit declarations?! Explicit variables must be introduced with let before use! But you don t need to specify types