# 4/19/2018. Chapter 11 :: Functional Languages

Size: px
Start display at page:

Transcription

1 Chapter 11 :: Functional Languages Programming Language Pragmatics Michael L. Scott Historical Origins The imperative and functional models grew out of work undertaken by Alan Turing, Alonzo Church, Stephen Kleene, Emil Post, etc. ~1930s different formalizations of the notion of an algorithm, or effective procedure, based on automata, symbolic manipulation, recursive function definitions, and combinatorics These results led Church to conjecture that any intuitively appealing model of computing would be equally powerful as well this conjecture is known as Church s thesis Copyright 2016 Elsevier Historical Origins Turing s model of computing was the Turing machine a sort of pushdown automaton using an unbounded storage tape the Turing machine computes in an imperative way, by changing the values in cells of its tape like variables just as a high level imperative program computes by changing the values of variables Historical Origins Church s model of computing is called the lambda calculus based on the notion of parameterized expressions (with each parameter introduced by an occurrence of the letter λ hence the notation s name. Lambda calculus was the inspiration for functional programming one uses it to compute by substituting parameters into expressions, just as one computes in a high level functional program by passing arguments to functions Historical Origins Mathematicians established a distinction between constructive proof (one that shows how to obtain a mathematical object with some desired property) nonconstructive proof (one that merely shows that such an object must exist, e.g., by contradiction) Logic programming is tied to the notion of constructive proofs, but at a more abstract level the logic programmer writes a set of axioms that allow the computer to discover a constructive proof for each particular set of inputs Functional languages such as Lisp, Scheme, FP, ML, Miranda, and Haskell are an attempt to realize Church's lambda calculus in practical form as a programming language The key idea: do everything by composing functions no mutable state no side effects 1

2 Necessary features, many of which are missing in some imperative languages 1st class and high-order functions serious polymorphism powerful list facilities structured function returns fully general aggregates garbage collection So how do you get anything done in a functional language? Recursion (especially tail recursion) takes the place of iteration In general, you can get the effect of a series of assignments x := 0... x := expr1... x := expr2... from f3(f2(f1(0))), where each f expects the value of x as an argument, f1 returns expr1, and f2 returns expr2 Recursion even does a nifty job of replacing looping x := 0; i := 1; j := 100; while i < j do x := x + i*j; i := i + 1; j := j - 1 end while return x becomes f(0,1,100), where f(x,i,j) == if i < j then f (x+i*j, i+1, j-1) else x Thinking about recursion as a direct, mechanical replacement for iteration, however, is the wrong way to look at things One has to get used to thinking in a recursive style Even more important than recursion is the notion of higher-order functions Take a function as argument, or return a function as a result Great for building things Lisp also has the following (which are not necessarily present in other functional languages) homo-iconography self-definition read-evaluate-print Variants of LISP Pure (original) Lisp Interlisp, MacLisp, Emacs Lisp Common Lisp Scheme Pure Lisp is purely functional; all other Lisps have imperative features All early Lisps dynamically scoped Not clear whether this was deliberate or if it happened by accident Scheme and Common Lisp statically scoped Common Lisp provides dynamic scope as an option for explicitly-declared special functions Common Lisp now THE standard Lisp Very big; complicated (The Ada of functional programming) 2

3 Scheme is a particularly elegant Lisp Other functional languages ML Miranda Haskell FP Haskell is the leading language for research in functional programming As mentioned earlier, Scheme is a particularly elegant Lisp Interpreter runs a read-eval-print loop Things typed into the interpreter are evaluated (recursively) once Anything in parentheses is a function call (unless quoted) Parentheses are NOT just grouping, as they are in Algol-family languages Adding a level of parentheses changes meaning (+ 3 4) 7 ((+ 3 4))) error (the ' ' arrow means 'evaluates to ) Scheme: Boolean values #t and #f Numbers Lambda expressions Quoting (+ 3 4) 7 (quote (+ 3 4)) (+ 3 4) '(+ 3 4) (+ 3 4) Mechanisms for creating new scopes (let ((square (lambda (x) (* x x))) (plus +)) (sqrt (plus (square a) (square b)))) Scheme: conditional expressions (if (< x 0) (- 0 x)) (if (< x y) x y) (if (< 2 3) 4 5) 4 (cond ((< 3 2) 1) ((< 4 3) 2) (else 3)) 3 case selection (case month ((sep apr jun nov) 30) (feb) 28) (else 31) ) ; if-then ; if-then-else Scheme: Imperative stuff assignments sequencing (begin) iteration I/O (read, display) Scheme standard functions (this is not a complete list): arithmetic boolean operators equivalence list operators symbol? number? complex? real? rational? integer? 3

4 expressions Cambridge prefix notation for all Scheme expressions: (f x1 x2 xn) (+ 2 2) ; evaluates to 4 (+ (* 5 4) (- 6 2)) ; means 5*4 + (6-2) (define (Square x) (* x x)) ; defines a fn (define f 120) ; defines a global Note: Scheme comments begin with ; 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 lists series of expressions enclosed in parentheses represent both functions and data empty list written as () e.g., ( ) is a list of even numbers stored as list transforming functions using cons (construct): (cons 8 ()) ; gives (8) (cons 6 (cons 8 ())) ; gives (6 8) (cons 4 (cons 6 (cons 8 ()))) ; gives (4 6 8) (cons 4 (cons 6 (cons 8 9))) ; gives ( ) Note: the last element of a list should be a null list list transforming functions suppose we define the list evens to be ( ), i.e., we write (define evens ( )). Then, (car evens) ; gives 0 (cdr evens) ; gives ( ) (cons 1 (cdr evens)) ; gives ( ) (null? ()) ; gives #t, or true (equal? 5 (5)) ; gives #f, or false (append (1 3 5) evens) ; gives ( ) (list (1 3 5) evens) ; gives ((1 3 5) ( )) more on car/cdr (car (cdr (evens)) ; gives 2 (cadr evens) ; gives 2 (cdr (cdr (evens)) ; gives (4, 6, 8) (cddr (evens) ; gives (4, 6, 8) (car (6 8)) ; gives 6 (car (cons 6 8)) ; gives 6 (car (8)) ; gives 8 (cdr (8)) ; gives () Note: the last two lists are different! 4

5 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 even simple tasks are accomplished recursively ((define (mystery1 alist) (if (null? alist) 0 (+ (car alist) (mystery1 (cdr alist))) )) (define (mystery2 alist) (if (null? alist) 0 (+ 1 (mystery2 (cdr alist))) )) 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) let expressions allow simplification of function definitions by defining intermediate expressions (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 mapcar applies the function to each member of a list (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 ( )) returns ( ) Example program - Symbolic Differentiation Symbolic Differentiation Rules d dx (c) 0 d (x) 1 dx d du (u v) dx dx dv dx d du (u v) dx dx dv dx d dv (uv) u dx dx v du dx d du (u/v) v dx dx u dv /v 2 dx c is a constant u and v are functions of x 5

6 Example program - Symbolic Differentiation Scheme encoding 1. Uses Cambridge Prefix notation e.g., 2x + 1 is written as (+ (* 2 x) 1) 2. Function diff incorporates these rules. e.g., (diff x (+ (* 2 x) 1)) should give an answer. 3. However, no simplification is performed. e.g. the answer for (diff x (+ (* 2 x) 1)) is (+ (+ (* 2 1) (* x 0)) 0) which is equivalent to the simplified answer, 2 Example program - Symbolic Differentiation Scheme program (define (diff x expr) (if (not (list? expr)) Source: )))) Tucker & Noonan (2007) (if (equal? x expr) 1 0) (let ((u (cadr expr)) (v (caddr expr))) (case (car expr) ((+) (list + (diff x u) (diff x v))) ((-) (list - (diff x u) (diff x v))) ((*) (list + (list * u (diff x v)) (list * v (diff x u)))) ((/) (list div (list - (list * v (diff x u)) (list * u (diff x v))) (list * u v))) Example program - Symbolic Differentiation trace of the program (diff x (+ (* 2 x) 1)) = (list + (diff x (*2 x)) (diff x 1)) = (list + (list + (list * 2 (diff x x)) (list * x (diff x 2))) (diff x 1)) = (list + (list + (list * 2 1) (list * x (diff x 2))) (diff x 1)) = (list + (list + (* 2 1) (list * x (diff x 2))) (diff x 1)) = (list + (list + (* 2 1) (list * x 0))(diff x 1)) = (list + (list + (* 2 1) (* x 0)(diff x 1)) = (list + ( + (* 2 1) (* x 0))(diff x 1)) = (list + ( + (* 2 1) (* x 0)) 0) = (+ (+ (* 2 1) (* x 0)) 0) We'll invoke the program by calling a function called 'simulate', passing it a DFA description and an input string The automaton description is a list of three items: start state the transition function the set of final states The transition function is a list of pairs the first element of each pair is a pair, whose first element is a state and whose second element in an input symbol if the current state and next input symbol match the first element of a pair, then the finite automaton enters the state given by the second element of the pair 6

7 OCaml is a descendent of ML, and cousin to Haskell, F# O stands for objective, referencing the object orientation introduced in the 1990s Interpreter runs a read-eval-print loop like in Scheme Things typed into the interpreter are evaluated (recursively) once Parentheses are NOT function calls, but indicate tuples Ocaml: Boolean values Numbers Chars Strings More complex types created by lists, arrays, records, objects, etc. (+ - * /) for ints, (+. -. *. /.) for floats let keyword for creating new names let average = fun x y -> (x +. y) /. 2.;; Ocaml: Variant Types type 'a tree = Empty Node of 'a * 'a tree * 'a tree;; Pattern matching let atomic_number (s, n, w) = n;; let mercury = ("Hg", 80, );; atomic_number mercury;; 80 OCaml: Different assignments for references := and array elements <- let insertion_sort a = for i = 1 to Array.length a - 1 do let t = a.(i) in let j = ref i in while!j > 0 && t < a.(!j - 1) do a.(!j) <- a.(!j - 1); j :=!j - 1 done; a.(!j) <- t done;; We'll invoke the program by calling a function called 'simulate', passing it a DFA description and an input string The automaton description is a record with three fields: start state the transition function the list of final states The transition function is a list of triples the first two elements are a state and an input symbol if these match the current state and next input, then the automaton enters a state given by the third element 7

8 Evaluation Order Revisited Applicative order what you're used to in imperative languages usually faster Normal order like call-by-name: don't evaluate arg until you need it sometimes faster terminates if anything will (Church-Rosser theorem) Evaluation Order Revisited In Scheme functions use applicative order defined with lambda special forms (aka macros) use normal order defined with syntax-rules A strict language requires all arguments to be well-defined, so applicative order can be used A non-strict language does not require all arguments to be well-defined; it requires normal-order evaluation Evaluation Order Revisited Lazy evaluation gives the best of both worlds But not good in the presence of side effects. delay and force in Scheme delay creates a "promise" High-Order Functions Higher-order functions Take a function as argument, or return a function as a result Great for building things Currying (after Haskell Curry, the same guy Haskell is named after) For details see Lambda calculus on CD ML, Miranda, OCaml, and Haskell have especially nice syntax for curried functions Functional Programming in Perspective Advantages of functional languages lack of side effects makes programs easier to understand lack of explicit evaluation order (in some languages) offers possibility of parallel evaluation (e.g. MultiLisp) lack of side effects and explicit evaluation order simplifies some things for a compiler (provided you don't blow it in other ways) programs are often surprisingly short language can be extremely small and yet powerful 8

9 Functional Programming in Perspective Problems difficult (but not impossible!) to implement efficiently on von Neumann machines lots of copying of data through parameters (apparent) need to create a whole new array in order to change one element heavy use of pointers (space/time and locality problem) frequent procedure calls heavy space use for recursion requires garbage collection requires a different mode of thinking by the programmer difficult to integrate I/O into purely functional model 9

### Chapter 11 :: Functional Languages

Chapter 11 :: Functional Languages Programming Language Pragmatics Michael L. Scott Copyright 2016 Elsevier 1 Chapter11_Functional_Languages_4e - Tue November 21, 2017 Historical Origins The imperative

### Programming Language Pragmatics

Chapter 10 :: Functional Languages Programming Language Pragmatics Michael L. Scott Historical Origins The imperative and functional models grew out of work undertaken Alan Turing, Alonzo Church, Stephen

### Functional Languages. Hwansoo Han

Functional Languages Hwansoo Han Historical Origins Imperative and functional models Alan Turing, Alonzo Church, Stephen Kleene, Emil Post, etc. ~1930s Different formalizations of the notion of an algorithm

### Functional Languages. CSE 307 Principles of Programming Languages Stony Brook University

Functional Languages CSE 307 Principles of Programming Languages Stony Brook University http://www.cs.stonybrook.edu/~cse307 1 Historical Origins 2 The imperative and functional models grew out of work

### COP4020 Programming Languages. Functional Programming Prof. Robert van Engelen

COP4020 Programming Languages Functional Programming Prof. Robert van Engelen Overview What is functional programming? Historical origins of functional programming Functional programming today Concepts

### LECTURE 16. Functional Programming

LECTURE 16 Functional Programming WHAT IS FUNCTIONAL PROGRAMMING? Functional programming defines the outputs of a program as a mathematical function of the inputs. Functional programming is a declarative

### Functional Programming. Big Picture. Design of Programming Languages

Functional Programming Big Picture What we ve learned so far: Imperative Programming Languages Variables, binding, scoping, reference environment, etc What s next: Functional Programming Languages Semantics

### Functional Programming

Functional Programming CS331 Chapter 14 Functional Programming Original functional language is LISP LISt Processing The list is the fundamental data structure Developed by John McCarthy in the 60 s Used

### Programming Languages

Programming Languages Tevfik Koşar Lecture - XIII March 2 nd, 2006 1 Roadmap Functional Languages Lambda Calculus Intro to Scheme Basics Functions Bindings Equality Testing Searching 2 1 Functional Languages

### Functional Programming. Pure Functional Programming

Functional Programming Pure Functional Programming Computation is largely performed by applying functions to values. The value of an expression depends only on the values of its sub-expressions (if any).

### 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

### 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

### CPS 506 Comparative Programming Languages. Programming Language Paradigm

CPS 506 Comparative Programming Languages Functional Programming Language Paradigm Topics Introduction Mathematical Functions Fundamentals of Functional Programming Languages The First Functional Programming

### 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

### Functional Programming Languages (FPL)

Functional Programming Languages (FPL) 1. Definitions... 2 2. Applications... 2 3. Examples... 3 4. FPL Characteristics:... 3 5. Lambda calculus (LC)... 4 6. Functions in FPLs... 7 7. Modern functional

### 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

### FP Foundations, Scheme

FP Foundations, Scheme In Text: Chapter 15 1 Functional Programming -- Prelude We have been discussing imperative languages C/C++, Java, Fortran, Pascal etc. are imperative languages Imperative languages

### CS 11 Haskell track: lecture 1

CS 11 Haskell track: lecture 1 This week: Introduction/motivation/pep talk Basics of Haskell Prerequisite Knowledge of basic functional programming e.g. Scheme, Ocaml, Erlang CS 1, CS 4 "permission of

### Imperative languages

Imperative languages Von Neumann model: store with addressable locations machine code: effect achieved by changing contents of store locations instructions executed in sequence, flow of control altered

### Principles of Programming Languages COMP251: Functional Programming in Scheme (and LISP)

Principles of Programming Languages COMP251: Functional Programming in Scheme (and LISP) Prof. Dekai Wu Department of Computer Science and Engineering The Hong Kong University of Science and Technology

### 1.3. Conditional expressions To express case distinctions like

Introduction Much of the theory developed in the underlying course Logic II can be implemented in a proof assistant. In the present setting this is interesting, since we can then machine extract from a

### 11/6/17. Functional programming. FP Foundations, Scheme (2) LISP Data Types. LISP Data Types. LISP Data Types. Scheme. LISP: John McCarthy 1958 MIT

Functional programming FP Foundations, Scheme (2 In Text: Chapter 15 LISP: John McCarthy 1958 MIT List Processing => Symbolic Manipulation First functional programming language Every version after the

### Introduction to Scheme

How do you describe them Introduction to Scheme Gul Agha CS 421 Fall 2006 A language is described by specifying its syntax and semantics Syntax: The rules for writing programs. We will use Context Free

### 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

### Functional Programming Lecture 1: Introduction

Functional Programming Lecture 1: Introduction Viliam Lisý Artificial Intelligence Center Department of Computer Science FEE, Czech Technical University in Prague viliam.lisy@fel.cvut.cz Acknowledgements

### Chapter 15. Functional Programming Languages

Chapter 15 Functional Programming Languages Chapter 15 Topics Introduction Mathematical Functions Fundamentals of Functional Programming Languages The First Functional Programming Language: Lisp Introduction

### Programming Systems in Artificial Intelligence Functional Programming

Click to add Text Programming Systems in Artificial Intelligence Functional Programming Siegfried Nijssen 8/03/16 Discover thediscover world at the Leiden world University at Leiden University Overview

### Functional Programming

Functional Programming Björn B. Brandenburg The University of North Carolina at Chapel Hill Based in part on slides and notes by S. Olivier, A. Block, N. Fisher, F. Hernandez-Campos, and D. Stotts. Brief

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

Harvard School of Engineering and Applied Sciences CS 152: Programming Languages Tuesday, February 19, 2013 The lambda calculus (or λ-calculus) was introduced by Alonzo Church and Stephen Cole Kleene in

### Scheme Tutorial. Introduction. The Structure of Scheme Programs. Syntax

Scheme Tutorial Introduction Scheme is an imperative language with a functional core. The functional core is based on the lambda calculus. In this chapter only the functional core and some simple I/O is

### Lambda Calculus see notes on Lambda Calculus

Lambda Calculus see notes on Lambda Calculus Shakil M. Khan adapted from Gunnar Gotshalks recap so far: Lisp data structures basic Lisp programming bound/free variables, scope of variables Lisp symbols,

### (Func&onal (Programming (in (Scheme)))) Jianguo Lu

(Func&onal (Programming (in (Scheme)))) Jianguo Lu 1 Programming paradigms Func&onal No assignment statement No side effect Use recursion Logic OOP AOP 2 What is func&onal programming It is NOT what you

### CSC312 Principles of Programming Languages : Functional Programming Language. Copyright 2006 The McGraw-Hill Companies, Inc.

CSC312 Principles of Programming Languages : Functional Programming Language Overview of Functional Languages They emerged in the 1960 s with Lisp Functional programming mirrors mathematical functions:

### CS 360 Programming Languages Interpreters

CS 360 Programming Languages Interpreters Implementing PLs Most of the course is learning fundamental concepts for using and understanding PLs. Syntax vs. semantics vs. idioms. Powerful constructs like

### CSC 533: Programming Languages. Spring 2015

CSC 533: Programming Languages Spring 2015 Functional programming LISP & Scheme S-expressions: atoms, lists functional expressions, evaluation, define primitive functions: arithmetic, predicate, symbolic,

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

Chapter 14 Functional Programming Programming Languages 2nd edition Tucker and Noonan It is better to have 100 functions operate one one data structure, than 10 functions on 10 data structures. A. Perlis

### Modern Programming Languages. Lecture LISP Programming Language An Introduction

Modern Programming Languages Lecture 18-21 LISP Programming Language An Introduction 72 Functional Programming Paradigm and LISP Functional programming is a style of programming that emphasizes the evaluation

### COP4020 Programming Assignment 1 - Spring 2011

COP4020 Programming Assignment 1 - Spring 2011 In this programming assignment we design and implement a small imperative programming language Micro-PL. To execute Mirco-PL code we translate the code to

### CS 242. Fundamentals. Reading: See last slide

CS 242 Fundamentals Reading: See last slide Syntax and Semantics of Programs Syntax The symbols used to write a program Semantics The actions that occur when a program is executed Programming language

### Notes on Higher Order Programming in Scheme. by Alexander Stepanov

by Alexander Stepanov August 1986 INTRODUCTION Why Scheme? Because it allows us to deal with: 1. Data Abstraction - it allows us to implement ADT (abstact data types) in a very special way. The issue of

### 1. true / false By a compiler we mean a program that translates to code that will run natively on some machine.

1. true / false By a compiler we mean a program that translates to code that will run natively on some machine. 2. true / false ML can be compiled. 3. true / false FORTRAN can reasonably be considered

### CS 415 Midterm Exam Spring SOLUTION

CS 415 Midterm Exam Spring 2005 - SOLUTION Name Email Address Student ID # Pledge: This exam is closed note, closed book. Questions will be graded on quality of answer. Please supply the best answer you

### 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

### CSc 520 Principles of Programming Languages

CSc 520 Principles of Programming Languages 9: Scheme Metacircular Interpretation Christian Collberg collberg@cs.arizona.edu Department of Computer Science University of Arizona Copyright c 2005 Christian

### CSCI337 Organisation of Programming Languages LISP

Organisation of Programming Languages LISP Getting Started Starting Common Lisp \$ clisp i i i i i i i ooooo o ooooooo ooooo ooooo I I I I I I I 8 8 8 8 8 o 8 8 I \ `+' / I 8 8 8 8 8 8 \ `-+-' / 8 8 8 ooooo

### CS 314 Principles of Programming Languages

CS 314 Principles of Programming Languages Lecture 15: Review and Functional Programming Zheng (Eddy) Zhang Rutgers University March 19, 2018 Class Information Midterm exam forum open in Sakai. HW4 and

### Scheme Quick Reference

Scheme Quick Reference COSC 18 Fall 2003 This document is a quick reference guide to common features of the Scheme language. It is not intended to be a complete language reference, but it gives terse summaries

### Programming Languages

Programming Languages Lambda Calculus and Scheme CSCI-GA.2110-003 Fall 2011 λ-calculus invented by Alonzo Church in 1932 as a model of computation basis for functional languages (e.g., Lisp, Scheme, ML,

### Scheme: Expressions & Procedures

Scheme: Expressions & Procedures CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Friday, March 31, 2017 Glenn G. Chappell Department of Computer Science University

### Lambda Calculus and Computation

6.037 Structure and Interpretation of Computer Programs Chelsea Voss csvoss@mit.edu Massachusetts Institute of Technology With material from Mike Phillips and Nelson Elhage February 1, 2018 Limits to Computation

### Chapter 8 :: Composite Types

Chapter 8 :: Composite Types Programming Language Pragmatics, Fourth Edition Michael L. Scott Copyright 2016 Elsevier 1 Chapter08_Composite_Types_4e - Tue November 21, 2017 Records (Structures) and Variants

### Example Scheme Function: equal

ICOM 4036 Programming Languages Functional Programming Languages Mathematical Functions Fundamentals of Functional Programming Languages The First Functional Programming Language: LISP Introduction to

10 Functional Languages Previous chapters of this text have focused largely on imperative programming languages. In the current chapter and the next we emphasize functional and logic languages instead.

### Introduction. chapter Functions

chapter 1 Introduction In this chapter we set the stage for the rest of the book. We start by reviewing the notion of a function, then introduce the concept of functional programming, summarise the main

### 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

### n λxy.x n y, [inc] [add] [mul] [exp] λn.λxy.x(nxy) λmn.m[inc]0 λmn.m([add]n)0 λmn.n([mul]m)1

LAMBDA CALCULUS 1. Background λ-calculus is a formal system with a variety of applications in mathematics, logic, and computer science. It examines the concept of functions as processes, rather than the

### Functional Programming and λ Calculus. Amey Karkare Dept of CSE, IIT Kanpur

Functional Programming and λ Calculus Amey Karkare Dept of CSE, IIT Kanpur 0 Software Development Challenges Growing size and complexity of modern computer programs Complicated architectures Massively

### Scheme Quick Reference

Scheme Quick Reference COSC 18 Winter 2003 February 10, 2003 1 Introduction This document is a quick reference guide to common features of the Scheme language. It is by no means intended to be a complete

### From the λ-calculus to Functional Programming Drew McDermott Posted

From the λ-calculus to Functional Programming Drew McDermott drew.mcdermott@yale.edu 2015-09-28 Posted 2015-10-24 The λ-calculus was intended from its inception as a model of computation. It was used by

Haskell Review COMP360 Some people talk in their sleep. Lecturers talk while other people sleep Albert Camus Remaining Schedule Friday, April 7 Haskell Monday, April 10 Logic Programming read chapter 12

### 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

### Lambda Calculus. Variables and Functions. cs3723 1

Lambda Calculus Variables and Functions cs3723 1 Lambda Calculus Mathematical system for functions Computation with functions Captures essence of variable binding Function parameters and substitution Can

### CS 314 Principles of Programming Languages

CS 314 Principles of Programming Languages Lecture 16: Functional Programming Zheng (Eddy Zhang Rutgers University April 2, 2018 Review: Computation Paradigms Functional: Composition of operations on data.

### Imperative, OO and Functional Languages A C program is

Imperative, OO and Functional Languages A C program is a web of assignment statements, interconnected by control constructs which describe the time sequence in which they are to be executed. In Java programming,

### 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

### Programming Languages Third Edition

Programming Languages Third Edition Chapter 12 Formal Semantics Objectives Become familiar with a sample small language for the purpose of semantic specification Understand operational semantics Understand

### CSc 372. Comparative Programming Languages. 2 : Functional Programming. Department of Computer Science University of Arizona

1/37 CSc 372 Comparative Programming Languages 2 : Functional Programming Department of Computer Science University of Arizona collberg@gmail.com Copyright c 2013 Christian Collberg 2/37 Programming Paradigms

### CSCE 314 TAMU Fall CSCE 314: Programming Languages Dr. Flemming Andersen. Haskell Basics

1 CSCE 314: Programming Languages Dr. Flemming Andersen Haskell Basics 2 Contents 1. Jump into Haskell: Using ghc and ghci (more detail) 2. Historical Background of Haskell 3. Lazy, Pure, and Functional

### Functional Programming

Functional Programming CS 1025 Computer Science Fundamentals I Stephen M. Watt University of Western Ontario When the Function is the Thing In O-O programming, you typically know where an action is needed,

### 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

### Putting the fun in functional programming

CM20167 Topic 4: Map, Lambda, Filter Guy McCusker 1W2.1 Outline 1 Introduction to higher-order functions 2 Map 3 Lambda 4 Filter Guy McCusker (1W2.1 CM20167 Topic 4 2 / 42 Putting the fun in functional

### Summer 2017 Discussion 10: July 25, Introduction. 2 Primitives and Define

CS 6A Scheme Summer 207 Discussion 0: July 25, 207 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,

### CSCE 314 Programming Languages

CSCE 314 Programming Languages Haskell 101 Dr. Hyunyoung Lee 1 Contents 1. Historical Background of Haskell 2. Lazy, Pure, and Functional Language 3. Using ghc and ghci 4. Functions 5. Haskell Scripts

### Haskell 98 in short! CPSC 449 Principles of Programming Languages

Haskell 98 in short! n Syntax and type inferencing similar to ML! n Strongly typed! n Allows for pattern matching in definitions! n Uses lazy evaluation" F definition of infinite lists possible! n Has

### 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:

### 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

### 4.2 Variations on a Scheme -- Lazy Evaluation

[Go to first, previous, next page; contents; index] 4.2 Variations on a Scheme -- Lazy Evaluation Now that we have an evaluator expressed as a Lisp program, we can experiment with alternative choices in

### Lecture 9: More Lambda Calculus / Types

Lecture 9: More Lambda Calculus / Types CSC 131 Spring, 2019 Kim Bruce Pure Lambda Calculus Terms of pure lambda calculus - M ::= v (M M) λv. M - Impure versions add constants, but not necessary! - Turing-complete

### - M ::= v (M M) λv. M - Impure versions add constants, but not necessary! - Turing-complete. - true = λ u. λ v. u. - false = λ u. λ v.

Pure Lambda Calculus Lecture 9: More Lambda Calculus / Types CSC 131 Spring, 2019 Kim Bruce Terms of pure lambda calculus - M ::= v (M M) λv. M - Impure versions add constants, but not necessary! - Turing-complete

### CSE 341 Section Handout #6 Cheat Sheet

Cheat Sheet Types numbers: integers (3, 802), reals (3.4), rationals (3/4), complex (2+3.4i) symbols: x, y, hello, r2d2 booleans: #t, #f strings: "hello", "how are you?" lists: (list 3 4 5) (list 98.5

### CS 415 Midterm Exam Spring 2002

CS 415 Midterm Exam Spring 2002 Name KEY Email Address Student ID # Pledge: This exam is closed note, closed book. Good Luck! Score Fortran Algol 60 Compilation Names, Bindings, Scope Functional Programming

### Introduction to OCaml

Fall 2018 Introduction to OCaml Yu Zhang Course web site: http://staff.ustc.edu.cn/~yuzhang/tpl References Learn X in Y Minutes Ocaml Real World OCaml Cornell CS 3110 Spring 2018 Data Structures and Functional

### CMSC 331 Final Exam Section 0201 December 18, 2000

CMSC 331 Final Exam Section 0201 December 18, 2000 Name: Student ID#: You will have two hours to complete this closed book exam. We reserve the right to assign partial credit, and to deduct points for

### 5. Introduction to the Lambda Calculus. Oscar Nierstrasz

5. Introduction to the Lambda Calculus Oscar Nierstrasz Roadmap > What is Computability? Church s Thesis > Lambda Calculus operational semantics > The Church-Rosser Property > Modelling basic programming

### User-defined Functions. Conditional Expressions in Scheme

User-defined Functions The list (lambda (args (body s to a function with (args as its argument list and (body as the function body. No quotes are needed for (args or (body. (lambda (x (+ x 1 s to the increment

### Lecture #24: Programming Languages and Programs

Lecture #24: Programming Languages and Programs A programming language is a notation for describing computations or processes. These range from low-level notations, such as machine language or simple hardware

### CSCC24 Functional Programming Scheme Part 2

CSCC24 Functional Programming Scheme Part 2 Carolyn MacLeod 1 winter 2012 1 Based on slides from Anya Tafliovich, and with many thanks to Gerald Penn and Prabhakar Ragde. 1 The Spirit of Lisp-like Languages

### An Explicit-Continuation Metacircular Evaluator

Computer Science (1)21b (Spring Term, 2018) Structure and Interpretation of Computer Programs An Explicit-Continuation Metacircular Evaluator The vanilla metacircular evaluator gives a lot of information

### CS 6110 S14 Lecture 1 Introduction 24 January 2014

CS 6110 S14 Lecture 1 Introduction 24 January 2014 1 Introduction What is a program? Is it just something that tells the computer what to do? Yes, but there is much more to it than that. The basic expressions

### Chapter 15. Functional Programming Languages ISBN

Chapter 15 Functional Programming Languages ISBN 0-321-49362-1 Chapter 15 Topics Introduction Mathematical Functions Fundamentals of Functional Programming Languages The First Functional Programming Language:

### 11/6/17. Outline. FP Foundations, Scheme. Imperative Languages. Functional Programming. Mathematical Foundations. Mathematical Foundations

Outline FP Foundations, Scheme In Text: Chapter 15 Mathematical foundations Functional programming λ-calculus LISP Scheme 2 Imperative Languages We have been discussing imperative languages C/C++, Java,

### Symbolic Programming. Dr. Zoran Duric () Symbolic Programming 1/ 89 August 28, / 89

Symbolic Programming Symbols: +, -, 1, 2 etc. Symbolic expressions: (+ 1 2), (+ (* 3 4) 2) Symbolic programs are programs that manipulate symbolic expressions. Symbolic manipulation: you do it all the

### Logical Methods in... using Haskell Getting Started

Logical Methods in... using Haskell Getting Started Jan van Eijck May 4, 2005 Abstract The purpose of this course is to teach a bit of functional programming and logic, and to connect logical reasoning

### Functional Programming Languages (FPL)

Functional Programming Languages (FPL) 1. Definitions... 3 2. Applications... 3 3. Examples... 4 4. FPL Characteristics:... 5 5. Lambda calculus (LC)... 6 5.1. LC expressions forms... 6 5.2. Semantic of

### A Small Interpreted Language

A Small Interpreted Language What would you need to build a small computing language based on mathematical principles? The language should be simple, Turing equivalent (i.e.: it can compute anything that

### 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

### SCHEME 8. 1 Introduction. 2 Primitives COMPUTER SCIENCE 61A. March 23, 2017

SCHEME 8 COMPUTER SCIENCE 61A March 2, 2017 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,