# Problem Set 4: Streams and Lazy Evaluation

Save this PDF as:

Size: px
Start display at page:

## Transcription

1 Due Friday, March 24 Computer Science (1)21b (Spring Term, 2017) Structure and Interpretation of Computer Programs Problem Set 4: Streams and Lazy Evaluation Reading Assignment: Chapter 3, Section 3.5. The purpose of this assignment is to give you some experience with the use of streams and delayed evaluation as a mechanism for organizing computation. Delayed evaluation is a powerful technique, so be careful. Some of the phenomena you will see here may be mind-boggling hold onto your chairs. Many of the procedures you will need have been provided in the code attached, which should be loaded when you begin work on this problem set. You should be familiar with their contents before starting work in the laboratory. Most of the work in this laboratory assignment is conceptual. There are no large programs to write, but several difficult ideas to understand. Some infinite streams As explained in section 3.5.2, we can define an infinite stream of ones and use this to define the stream of positive integers. (define ones (cons-stream 1 ones)) (define integers (cons-stream 1 (add-streams ones integers))) Problem 1. Type in these definitions and verify that they work by using the print-stream procedure, which has been loaded with this problem set. 1 2 Show how to define the stream of all integers that are not divisible by either 2, 3, or 5. (Use stream-filter.) The following procedure (included in the code for the problem set) takes two infinite streams and interleaves them, selecting elements alternately from each stream: (define (interleave s t) (cons-stream (stream-car s) (interleave t (stream-cdr s)))) Problem 2. Test the procedure by interleaving the stream of integers that are not divisible by 7 with the stream of integers not divisible by 3. What are the first few elements of the resulting stream? What expression did you evaluate to find this result? Problem 3. Define the following stream alt (define alt (cons-stream 0 (interleave integers alt))) What can you say about the structure of this stream? Do you notice any regularities, and can you explain how they arise? (For example, which elements are equal to 0? Equal to 1? Equal to 2?) Interleaving is a somewhat ad hoc way to combine two streams. Merging is an alternative combination method, which we can use when there is some way to compare the sizes of stream elements. The merge operation takes two ordered streams (where the elements are arranged in increasing order) and produces an ordered stream as a result, omitting duplicates of elements that appear in both streams: 1 Check the WWW home page for the course for the code you need in order to complete this assignment. 2 The print-stream procedure loaded here differs from the one in the text (a) by a clever hack (b) in that it doesn t start a new line for every stream element. If you would rather see each element printed on a separate line, just do (stream-for-each print stream) as shown in the text. 1

2 (define (merge s1 s2) (cond ((empty-stream? s1) s2) ((empty-stream? s2) s1) (else (let ((h1 (stream-car s1)) (h2 (stream-car s2))) (cond ((< h1 h2) (cons-stream h1 (merge (stream-cdr s1) s2))) ((> h1 h2) (cons-stream h2 (merge s1 (stream-cdr s2)))) (else (cons-stream h1 (merge (stream-cdr s1) (stream-cdr s2))))))))) Generating an infinite stream of pairs from a pair of infinite streams The discussion beginning on page 338 of the book describes a method for generating pairs of integers (i, j). This part of the problem set deals with another method for doing so. Consider the problem of generating the stream of all pairs of integers (i,j) with i less than or equal to j. More generally, suppose we have two streams S = s 1, s 2, and T = t 1, t 2,. and imagine the infinite rectangular array: (s 1, t 1 ) (s 1, t 2 ) (s 1, t 3 ) (s 2, t 1 ) (s 2, t 2 ) (s 2, t 3 ) (s 3, t 1 ) (s 3, t 2 ) (s 3, t 3 ) Suppose we wish to generate a stream that contains all the pairs in the diagram that lie on or above the diagonal, i.e., the pairs: (s 1, t 1 ) (s 1, t 2 ) (s 1, t 3 ) (s 2, t 2 ) (s 2, t 3 ) (s 3, t 3 ) (If we take S and T both to be the stream of integers, we get the stream of pairs of integers (i, j) with i less than or equal to j.) 2

3 Call the stream of pairs (pairs S T), and consider it to be composed of three sets of elements: the element (s 1, t 1 ), the rest of the elements in the first row, and the remaining elements: (s 1, t 1 ) (s 1, t 2 ) (s 1, t 3 ) (s 2, t 2 ) (s 2, t 3 ) (s 3, t 3 ) Observe that the third part of this decomposition (elements not in the first row) is (recursively) (pairs (stream-cdr s) (stream-cdr t)). Also note that the rest of the first row is just (stream-map (lambda (x) (cons (stream-car s) x)) (stream-cdr t)) assuming that we use cons to construct the pairs (s i, t j ). Thus we can form our stream of pairs as follows: (define (pairs s t) (cons-stream (cons (stream-car s) (stream-car t)) (combine-in-some-way (stream-map (lambda (x) (cons (stream-car s) x)) (stream-cdr t)) (pairs (stream-cdr s) (stream-cdr t))))) In order to complete the procedure, we must decide on some way to combine-in-some-way the two inner streams. Problem 4. Define a procedure interleave-pairs that uses the general method for forming pairs as above, using interleave as in problem 2 above to combine the two streams. Examine the resulting stream (interleave-pairs integers integers) Can you make any general comments about the order in which the pairs are placed into the stream? For example, about how many pairs precede the pair (1,100)? the pair (99,100)? the pair (100,100)? 3 3 If you can make precise mathematical statements here, all the better. But feel free to give more qualitative answers if you find yourself getting bogged down. For the bogged, here s a hint: suppose we interleave the upper right and lower right streams in the above diagram, with the latter going first. Let f(i, j) be the position of (s i, t j ) in the output stream, with the first position numbered 1. Then you should be able to verify that f(1, n) = 2n 1 and f(m + 1, n + 1) = 2f(m, n). 3

4 Ordered streams of pairs Now we want to be able to generate streams where the pairs appear in some useful order, rather than in the order that results from an ad hoc interleaving process. If we want to use a strategy as in the merge procedure of problem 2, we need to define an order on pairs of integers that is, we need some way to say that a pair (i, j) is less than a pair (k, l). Assume that we can compute a positive integer weight for any pair (i, k), and to order pairs by their weight. We also assume that the weighting function is compatible with the ordering on integers, as follows: if m < n then for any k, weight((m, k)) < weight((n, k)); and if m < n then for any k, weight((k, m)) < weight((k, n)). (In other words, weight((i, j)) increases if you increase either i or j.) There are many different ways to choose a compatible weighting function. For instance, we could take the weight of (i, j) to be the sum i + j, or the sum of the cubes i 3 + j 3. Problem 5. Write a procedure merge-weighted, which is like merge, except for two differences: merge-weighted takes an additional argument weight, which is a procedure that computes the weight of a pair. This is used to determine the order that elements should appear in the resulting stream. Unlike merge, merge-weighted should not discard elements with duplicate weights. Indeed, we may find two different pairs with the same weight, and this may be interesting, as we shall see below. (This stipulation makes the structure of merge-weighted simpler than that of merge, since there is one less case to worry about. Also, you can leave out the empty-stream? test from merge, since we will be concerned here only with infinite streams.) Hand in your definition of merge-weighted. Now we can implement the pairs procedure as described above, using the procedure merge-weighted to combine the two streams. The following version of the procedure takes an additional argument pair-weight, which is a function of two variables that will be used to compute the weights: (define (weighted-pairs s t pair-weight) (cons-stream (cons (stream-car s) (stream-car t)) (merge-weighted (stream-map (lambda (x) (cons (stream-car s) x)) (stream-cdr t)) (weighted-pairs (stream-cdr s) (stream-cdr t) pair-weight) (lambda (p) (pair-weight (car p) (cdr p)))))) Note how lambda is used to convert pair-weight, a function of two arguments, into a procedure that expects a pair, as required by merge-weighted. 4

5 Problem 6. Weighted-pairs, as listed above, is included in the code for this problem set. Using this together with your procedure merge-weighted from problem 5 define the streams: (a) all pairs of positive integers (i, j) ordered according to the sum i + j. (b) all pairs of positive integers (i, j) ordered according to the sum i 3 + j 3. (c) all pairs of positive integers (i, j), where neither i nor j is divisible by 2, 3, or 5, ordered according to the sum 2i + 3j + 5ij. What are the first few pairs in each stream? What expression(s) did you type in order to generate each stream? Pairs with the same weight Ordered streams of pairs provide an elegant solution to the problem of computing the Ramanujan numbers numbers that can be written as the sum of two cubes in more than one way. This problem is given in exercise 3.71 on page 342 of the text. You should read that problem now. Observe that to find a number that can be written as the sum of two cubes in two different ways, we need only generate the stream of pairs of integers (i, j) weighted according to the sum i 3 + j 3, then search the stream for two consecutive pairs with the same weight. To implement and generalize the observation, we use a procedure combine-same-weights. This procedure takes a stream of pairs together with a weighting function pair-weight, which is a function of two arguments, as in the weighted-pairs procedure. We assume that the pairs appear in the stream according to increasing weight. Combine-same-weights returns a stream of lists. The car of each list is a weight, and the cdr is all the pairs that have that weight. The lists appear in the stream in order of increasing weight. For instance, if the input stream is the one that you should have obtained in problem 6(a): (1. 1) (1. 2) (2. 2) (1. 3) (2. 3) (1. 4) (3. 3) (2. 4) (1. 5) (3. 4) (2. 5) (1. 6) (4. 4) (3. 5) (2. 6) (1. 7)... and pair-weight is +, then the procedure should generate the stream (2 (1. 1)) (3 (1. 2)) (4 (1. 3) (2. 2)) (5 (1. 4) (2. 3)) (6 (1. 5) (2. 4) (3. 3)) (7 (1. 6) (2. 5) (3. 4)) (8 (1. 7) (2. 6) (3. 5) (4. 4))... Problem 7. Implement the procedure combine-same-weights as described above. 5

6 Problem 8. The following procedure is included in the code for this problem set: (define (same-weight-pairs s t pair-weight) (combine-same-weights (weighted-pairs s t pair-weight) pair-weight)) Use this code to generate the Ramanujan numbers by first generating (same-weight-pairs integers integers (lambda (i j) (+ (cube i) (cube j)))) and filtering the result for lists that contain more than one pair. What are the first five Ramanujan numbers? Problem 9. In a similar way to problem 8, generate streams of (a) All numbers that can be written as the sum of two squares in three different ways (showing how they can be so written). What are the five smallest such numbers? (b) All numbers that can be written, in two different ways, in the form i 3 + j 2 where i is an odd positive integer and j is an even positive integer. (Also give, for each number, the appropriate values for i and j.) What are the five smallest such numbers? What expressions did you use to generate these streams? 6

7 ;; This is the code for Streams and Lazy Evaluation ;; The Scheme we re using does not have stream-car and stream-cdr ;; but rather head and tail. Let s make it compatible with ;; the text. (The first edition of A+S used head and tail.) (define stream-car head) (define stream-cdr tail) ;; Now, on with the show... (define (divisible? x y) (= (remainder x y) 0)) ;; Useful stream utility functions (define (stream-filter pred stream) (cond ((empty-stream? stream) the-empty-stream) ((pred (stream-car stream)) (cons-stream (stream-car stream) (stream-filter pred (stream-cdr stream)))) (else (stream-filter pred (stream-cdr stream))))) ;; Mapping functions (define (stream-map proc stream) (if (empty-stream? stream) the-empty-stream (cons-stream (proc (stream-car stream)) (stream-map proc (stream-cdr stream))))) ;; Iterating along a stream. (define (stream-for-each proc stream) (if (empty-stream? stream) done (begin (proc (stream-car stream)) (stream-for-each proc (stream-cdr stream))))) 7

8 ;; Streams of numbers (define (add-streams s1 s2) (cond ((empty-stream? s1) s2) ((empty-stream? s2) s1) (else (cons-stream (+ (stream-car s1) (stream-car s2)) (add-streams (stream-cdr s1) (stream-cdr s2)))))) (define (scale-stream c stream) (stream-map (lambda (x) (* x c)) stream)) ;; Differs from book by not checking for empty streams (define (interleave s1 s2) (cons-stream (stream-car s1) (interleave s2 (stream-cdr s1)))) (define (merge s1 s2) (cond ((empty-stream? s1) s2) ((empty-stream? s2) s1) (else (let ((h1 (stream-car s1)) (h2 (stream-car s2))) (cond ((< h1 h2) (cons-stream h1 (merge (stream-cdr s1) s2))) ((> h1 h2) (cons-stream h2 (merge s1 (stream-cdr s2)))) (else (cons-stream h1 (merge (stream-cdr s1) (stream-cdr s2))))))))) ;; This next procedure is to be used in forming streams of pairs, ;; once you have defined the procedure MERGE-WEIGHTED (define (weighted-pairs s t pair-weight) (cons-stream (cons (stream-car s) (stream-car t)) (merge-weighted (stream-map (lambda (x) (cons (stream-car s) x)) (stream-cdr t)) (weighted-pairs (stream-cdr s) (stream-cdr t) pair-weight) (lambda (p) (pair-weight (car p) (cdr p)))))) ;; This procedure forms streams of weighted pairs, where pairs of the ;; same weight have been combined. In order to use it, you must ;; define an appropriate procedure COMBINE-SAME-WEIGHTS (define (same-weight-pairs s t pair-weight) (combine-same-weights (weighted-pairs s t pair-weight) pair-weight)) 8

9 ;; Stream I/O. (define print-stream (let () (define (iter s) (if (empty-stream? s) (display "]") (begin (write (stream-car s)) (write " ") (iter (stream-cdr s))))) (lambda (s) (write "") (iter s)))) ;; You may wonder why PRINT-STREAM has been written in such an obscure ;; way, when ;; (define (print-stream s) ;; (write "[") ;; (stream-for-each (lambda (x) (write x) (write " ")) s) ;; (write "]")) ;; would have the same effect. If you think about the "actor model" ;; and tail recursion, however, you may begin to see why. ;; For exercise 3.43 (define (show x) (write-line x) x) (define (nth-stream n s) (if (= n 0) (stream-car s) (nth-stream (- n 1) (stream-cdr s)))) (define (enumerate-interval low high) (if (> low high) the-empty-stream (cons-stream low (enumerate-interval (1+ low) high)))) 9

### CS450 - Structure of Higher Level Languages

Spring 2018 Streams February 24, 2018 Introduction Streams are abstract sequences. They are potentially infinite we will see that their most interesting and powerful uses come in handling infinite sequences.

### STREAMS 10. Basics of Streams. Practice with Streams COMPUTER SCIENCE 61AS. 1. What is a stream? 2. How does memoization work?

STREAMS 10 COMPUTER SCIENCE 61AS Basics of Streams 1. What is a stream? 2. How does memoization work? 3. Is a cons-stream a special form? Practice with Streams 1. Define a procedure (ones) that, when run

### STREAMS 10. Basics of Streams. Practice with Streams COMPUTER SCIENCE 61AS. 1. What is a stream?

STREAMS 10 COMPUTER SCIENCE 61AS Basics of Streams 1. What is a stream? A stream is an element and a promise to evaluate the rest of the stream. Streams are a clever idea that allows one to use sequence

### Normal Order (Lazy) Evaluation SICP. Applicative Order vs. Normal (Lazy) Order. Applicative vs. Normal? How can we implement lazy evaluation?

Normal Order (Lazy) Evaluation Alternative models for computation: Normal (Lazy) Order Evaluation Memoization Streams Applicative Order: evaluate all arguments, then apply operator Normal Order: pass unevaluated

### Fall 2017 December 4, 2017

CS 61A Final Review Fall 2017 December 4, 2017 Instructions Form a small group. Start on the first problem. Check off with a helper or discuss your solution process with another group once everyone understands

### Repetition Through Recursion

Fundamentals of Computer Science I (CS151.02 2007S) Repetition Through Recursion Summary: In many algorithms, you want to do things again and again and again. For example, you might want to do something

### Statistics Case Study 2000 M. J. Clancy and M. C. Linn

Statistics Case Study 2000 M. J. Clancy and M. C. Linn Problem Write and test functions to compute the following statistics for a nonempty list of numeric values: The mean, or average value, is computed

### CS61A Notes 02b Fake Plastic Trees. 2. (cons ((1 a) (2 o)) (3 g)) 3. (list ((1 a) (2 o)) (3 g)) 4. (append ((1 a) (2 o)) (3 g))

CS61A Notes 02b Fake Plastic Trees Box and Pointer Diagrams QUESTIONS: Evaluate the following, and draw a box-and-pointer diagram for each. (Hint: It may be easier to draw the box-and-pointer diagram first.)

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

### Module 10: Imperative Programming, Modularization, and The Future

Module 10: Imperative Programming, Modularization, and The Future If you have not already, make sure you Read How to Design Programs Sections 18. 1 CS 115 Module 10: Imperative Programming, Modularization,

### Spring 2018 Discussion 7: March 21, Introduction. 2 Primitives

CS 61A Scheme Spring 2018 Discussion 7: March 21, 2018 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

### Principles of Programming Languages Topic: Functional Programming Professor L. Thorne McCarty Spring 2003

Principles of Programming Languages Topic: Functional Programming Professor L. Thorne McCarty Spring 2003 CS 314, LS, LTM: Functional Programming 1 Scheme A program is an expression to be evaluated (in

### ;; definition of function, fun, that adds 7 to the input (define fun (lambda (x) (+ x 7)))

Homework 1 Due 13 September Handout 2 CSC 131: Fall, 2006 6 September Reading 1. Read Mitchell, Chapter 3. 2. The Scheme Tutorial and the Scheme Quick Reference from the Links web page, as needed for the

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

### CIS 194: Homework 6. Due Monday, February 25. Fibonacci numbers

CIS 194: Homework 6 Due Monday, February 25 Files you should submit: Fibonacci.hs This week we learned about Haskell s lazy evaluation. This homework assignment will focus on one particular consequence

### Resources matter. Orders of Growth of Processes. R(n)= (n 2 ) Orders of growth of processes. Partial trace for (ifact 4) Partial trace for (fact 4)

Orders of Growth of Processes Today s topics Resources used by a program to solve a problem of size n Time Space Define order of growth Visualizing resources utilization using our model of evaluation Relating

### An introduction to Scheme

An introduction to Scheme Introduction A powerful programming language is more than just a means for instructing a computer to perform tasks. The language also serves as a framework within which we organize

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

### 2. CONNECTIVITY Connectivity

2. CONNECTIVITY 70 2. Connectivity 2.1. Connectivity. Definition 2.1.1. (1) A path in a graph G = (V, E) is a sequence of vertices v 0, v 1, v 2,..., v n such that {v i 1, v i } is an edge of G for i =

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

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

### Structure and Interpretation of Computer Programs

CS 61A Fall 2016 Structure and Interpretation of Computer Programs Final INSTRUCTIONS You have 3 hours to complete the exam. The exam is closed book, closed notes, closed computer, closed calculator, except

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

### MORE SCHEME. 1 What Would Scheme Print? COMPUTER SCIENCE MENTORS 61A. October 30 to November 3, Solution: Solutions begin on the following page.

MORE SCHEME COMPUTER SCIENCE MENTORS 61A October 30 to November 3, 2017 1 What Would Scheme Print? Solutions begin on the following page. 1. What will Scheme output? Draw box-and-pointer diagrams to help

### Scheme as implemented by Racket

Scheme as implemented by Racket (Simple view:) Racket is a version of Scheme. (Full view:) Racket is a platform for implementing and using many languages, and Scheme is one of those that come out of the

### Principles of Programming Languages

Principles of Programming Languages www.cs.bgu.ac.il/~ppl172 Lesson 6 - Defining a Programming Language Bottom Up Collaboration and Management - Elements of Programming Dana Fisman 1 What we accomplished

### Functional Programming - 2. Higher Order Functions

Functional Programming - 2 Higher Order Functions Map on a list Apply Reductions: foldr, foldl Lexical scoping with let s Functional-11, CS5314, Sp16 BGRyder 1 Higher Order Functions Functions as 1st class

### 11/2/2017 RECURSION. Chapter 5. Recursive Thinking. Section 5.1

RECURSION Chapter 5 Recursive Thinking Section 5.1 1 Recursive Thinking Recursion is a problem-solving approach that can be used to generate simple solutions to certain kinds of problems that are difficult

### CIS 194: Homework 6. Due Wednesday, 4 March. Fibonacci numbers. It s all about being lazy.

CIS 194: Homework 6 Due Wednesday, 4 March It s all about being lazy. Fibonacci numbers The Fibonacci numbers F n are defined as the sequence of integers, beginning with 1 and 1, where every integer in

### Structure and Interpretation of Computer Programs

CS 6A Fall 206 Structure and Interpretation of Computer Programs Final Solutions INSTRUCTIONS You have hours to complete the exam. The exam is closed book, closed notes, closed computer, closed calculator,

### Interpreters and Tail Calls Fall 2017 Discussion 8: November 1, 2017 Solutions. 1 Calculator. calc> (+ 2 2) 4

CS 61A Interpreters and Tail Calls Fall 2017 Discussion 8: November 1, 2017 Solutions 1 Calculator We are beginning to dive into the realm of interpreting computer programs that is, writing programs that

### Recursive Data and Recursive Functions

Structural Recursion and Induction Of all the material in this course, this lesson is probably the hardest for students to grasp at first, but it s also one of the most fundamental. Once you understand

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

### Scheme in Scheme: The Metacircular Evaluator Eval and Apply

Scheme in Scheme: The Metacircular Evaluator Eval and Apply CS21b: Structure and Interpretation of Computer Programs Brandeis University Spring Term, 2015 The metacircular evaluator is A rendition of Scheme,

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

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

### Delayed Expressions Fall 2017 Discussion 9: November 8, Iterables and Iterators. For Loops. Other Iterable Uses

CS 6A Delayed Expressions Fall 07 Discussion 9: November 8, 07 Iterables and Iterators An iterable is any container that can be processed sequentially. Examples include lists, tuples, strings, and dictionaries.

### Scheme Basics > (butfirst '(help!)) ()

Scheme Basics > (butfirst '(help!)) () [The butfirst of a *sentence* containing one word is all but that word, i.e., the empty sentence. (BUTFIRST 'HELP!) without the inner parentheses would be butfirst

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

### Homework 6: Higher-Order Procedures Due: 10:00 PM, Oct 17, 2017

Integrated Introduction to Computer Science Hughes Homework 6: Higher-Order Procedures Due: 10:00 PM, Oct 17, 2017 Contents 1 Fun with map (Practice) 2 2 Unfold (Practice) 3 3 Map2 3 4 Fold 4 5 All You

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

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

### Cardinality of Sets. Washington University Math Circle 10/30/2016

Cardinality of Sets Washington University Math Circle 0/0/06 The cardinality of a finite set A is just the number of elements of A, denoted by A. For example, A = {a, b, c, d}, B = {n Z : n } = {,,, 0,,,

### 4. Write a sum-of-products representation of the following circuit. Y = (A + B + C) (A + B + C)

COP 273, Winter 26 Exercises 2 - combinational logic Questions. How many boolean functions can be defined on n input variables? 2. Consider the function: Y = (A B) (A C) B (a) Draw a combinational logic

### Building a system for symbolic differentiation

Computer Science 21b Structure and Interpretation of Computer Programs Building a system for symbolic differentiation Selectors, constructors and predicates: (constant? e) Is e a constant? (variable? e)

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

### Matrices. Chapter Matrix A Mathematical Definition Matrix Dimensions and Notation

Chapter 7 Introduction to Matrices This chapter introduces the theory and application of matrices. It is divided into two main sections. Section 7.1 discusses some of the basic properties and operations

### Lisp: Question 1. Dr. Zoran Duric () Midterm Review 1 1/ 13 September 23, / 13

Lisp: Question 1 Write a recursive lisp function that takes a list as an argument and returns the number of atoms on any level of the list. For instance, list (A B (C D E) ()) contains six atoms (A, B,

### Properties and Definitions

Section 0.1 Contents: Operations Defined Multiplication as an Abbreviation Visualizing Multiplication Commutative Properties Parentheses Associative Properties Identities Zero Product Answers to Exercises

### More Complicated Recursion CMPSC 122

More Complicated Recursion CMPSC 122 Now that we've gotten a taste of recursion, we'll look at several more examples of recursion that are special in their own way. I. Example with More Involved Arithmetic

### Introduction to Functional Programming in Racket. CS 550 Programming Languages Jeremy Johnson

Introduction to Functional Programming in Racket CS 550 Programming Languages Jeremy Johnson 1 Objective To introduce functional programming in racket Programs are functions and their semantics involve

### Arrays and while Loops. Lecture 15 - COMP110 - Spring 2018

Arrays and while Loops Lecture 15 - COMP110 - Spring 2018 Announcements PS04 - March Sadness - Due Sunday 3/25 at 11:59pm Review Session - Tomorrow at 5pm in SN014 Tutoring Friday from 12pm - 4pm in SN115

### Functionally Modular. Self-Review Questions

Functionally Modular 5 Self-Review Questions Self-review 5.1 Which names are local, which are global and which are built-in in the following code fragment? Global names: Built-in names: space_invaders

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

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

### CSCI-1200 Data Structures Fall 2017 Lecture 13 Problem Solving Techniques

CSCI-1200 Data Structures Fall 2017 Lecture 13 Problem Solving Techniques Review from Lecture 12 Rules for writing recursive functions: 1. Handle the base case(s). 2. Define the problem solution in terms

### Structure and Interpretation of Computer Programs

CS 6A Spring 203 Structure and Interpretation of Computer Programs Final Solutions INSTRUCTIONS You have 3 hours to complete the exam. The exam is closed book, closed notes, closed computer, closed calculator,

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

### Exercise 1.1. Page 1 of 22. Website: Mobile:

Question 1: Exercise 1.1 Use Euclid s division algorithm to find the HCF of: (i) 135 and 225 Since 225 > 135, we apply the division lemma to 225 and 135 to obtain 225 = 135 1 + 90 Since remainder 90 0,

### CSC324 Functional Programming Efficiency Issues, Parameter Lists

CSC324 Functional Programming Efficiency Issues, Parameter Lists Afsaneh Fazly 1 January 28, 2013 1 Thanks to A.Tafliovich, P.Ragde, S.McIlraith, E.Joanis, S.Stevenson, G.Penn, D.Horton 1 Example: efficiency

### A LISP Interpreter in ML

UNIVERSITY OF OSLO Department of Informatics A LISP Interpreter in ML Mandatory Assignment 1 INF3110 September 21, 2009 Contents 1 1 Introduction The purpose of this assignment is to write an interpreter,

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

### Recursion Chapter 3.5

Recursion Chapter 3.5-1 - Outline Induction Linear recursion Example 1: Factorials Example 2: Powers Example 3: Reversing an array Binary recursion Example 1: The Fibonacci sequence Example 2: The Tower

### Functional programming in LISP

Programming Languages Week 4 Functional programming in LISP College of Information Science and Engineering Ritsumeikan University review of part 3 enumeration of dictionaries you receive a sequence of

### Structure and Interpretation of Computer Programs

CS 61A Summer 2014 Structure and Interpretation of Computer Programs Final Solutions INSTRUCTIONS ˆ You have 3 hours to complete the exam. ˆ The exam is closed book, closed notes, and closed electronics,

### A Brief Introduction to Scheme (II)

A Brief Introduction to Scheme (II) Philip W. L. Fong pwlfong@cs.uregina.ca Department of Computer Science University of Regina Regina, Saskatchewan, Canada Lists Scheme II p.1/29 Lists Aggregate data

### 19 Machine Learning in Lisp

19 Machine Learning in Lisp Chapter Objectives Chapter Contents ID3 algorithm and inducing decision trees from lists of examples. A basic Lisp implementation of ID3 Demonstration on a simple credit assessment

### Principles of Algorithm Design

Principles of Algorithm Design When you are trying to design an algorithm or a data structure, it s often hard to see how to accomplish the task. The following techniques can often be useful: 1. Experiment

### Chapter 3. Set Theory. 3.1 What is a Set?

Chapter 3 Set Theory 3.1 What is a Set? A set is a well-defined collection of objects called elements or members of the set. Here, well-defined means accurately and unambiguously stated or described. Any

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

### Fundamental mathematical techniques reviewed: Mathematical induction Recursion. Typically taught in courses such as Calculus and Discrete Mathematics.

Fundamental mathematical techniques reviewed: Mathematical induction Recursion Typically taught in courses such as Calculus and Discrete Mathematics. Techniques introduced: Divide-and-Conquer Algorithms

### regsim.scm ~/umb/cs450/ch5.base/ 1 11/11/13

1 File: regsim.scm Register machine simulator from section 5.2 of STRUCTURE AND INTERPRETATION OF COMPUTER PROGRAMS This file can be loaded into Scheme as a whole. Then you can define and simulate machines

### CIS 110 Introduction To Computer Programming. February 29, 2012 Midterm

CIS 110 Introduction To Computer Programming February 29, 2012 Midterm Name: Recitation # (e.g. 201): Pennkey (e.g. bjbrown): My signature below certifies that I have complied with the University of Pennsylvania

### CSCI 3155: Principles of Programming Languages Exam preparation #1 2007

CSCI 3155: Principles of Programming Languages Exam preparation #1 2007 Exercise 1. Consider the if-then-else construct of Pascal, as in the following example: IF 1 = 2 THEN PRINT X ELSE PRINT Y (a) Assume

### An Introduction to Scheme

An Introduction to Scheme Stéphane Ducasse stephane.ducasse@inria.fr http://stephane.ducasse.free.fr/ Stéphane Ducasse 1 Scheme Minimal Statically scoped Functional Imperative Stack manipulation Specification

### Iteration. # a and b are now equal # a and b are no longer equal Multiple assignment

Iteration 6.1. Multiple assignment As you may have discovered, it is legal to make more than one assignment to the same variable. A new assignment makes an existing variable refer to a new value (and stop

### A Lazy List Implementation in Squeak

A Lazy List Implementation in Squeak Takashi Yamamiya This material is based upon work supported in part by the National Science Foundation under Grant No. 0639876. Any opinions, findings, and conclusions

### Assignment 1. Due Tuesday October 11 at 11pm. No late assignments will be accepted. What to do

University of Toronto Mississauga CSC 324 - Principles of Programming Languages, Fall 2016 Assignment 1 Due Tuesday October 11 at 11pm. No late assignments will be accepted. What to do The questions below

### Lecture 12: Abstraction Functions

Lecture 12: Abstraction Functions 12.1 Context What you ll learn: How to read, write, and use abstraction functions to describe the relationship between the abstract values of a type and its representation.

### Faculty of Engineering Computer Engineering Department Islamic University of Gaza C++ Programming Language Lab # 6 Functions

Faculty of Engineering Computer Engineering Department Islamic University of Gaza 2013 C++ Programming Language Lab # 6 Functions C++ Programming Language Lab # 6 Functions Objective: To be familiar with

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

### 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 Spring Semester, 2005 Project 5 - The Meta-Circular

### CS 3512, Spring Instructor: Doug Dunham. Textbook: James L. Hein, Discrete Structures, Logic, and Computability, 3rd Ed. Jones and Barlett, 2010

CS 3512, Spring 2011 Instructor: Doug Dunham Textbook: James L. Hein, Discrete Structures, Logic, and Computability, 3rd Ed. Jones and Barlett, 2010 Prerequisites: Calc I, CS2511 Rough course outline:

### HIERARCHICAL DATA What is a Tree? How is it different from a Deep List? When would you use one over the other?

HIERARCHICAL DATA 5 COMPUTER SCIENCE 61AS Concepts and Definitions 1. What is a Tree? How is it different from a Deep List? When would you use one over the other? A Tree is an Abstract Data Type composed

### Writing Parallel Programs; Cost Model.

CSE341T 08/30/2017 Lecture 2 Writing Parallel Programs; Cost Model. Due to physical and economical constraints, a typical machine we can buy now has 4 to 8 computing cores, and soon this number will be

### Reduction & Recursion Overview

Reduction & Recursion Overview Reduction definition Reduction techniques Recursion definition Recursive thinking (Many) recursion examples Indirect recursion Runtime stack Factorial isnumericstring add

### Shell CSCE 314 TAMU. Functions continued

1 CSCE 314: Programming Languages Dr. Dylan Shell Functions continued 2 Outline Defining Functions List Comprehensions Recursion 3 A Function without Recursion Many functions can naturally be defined in

### Dr. Amotz Bar-Noy s Compendium of Algorithms Problems. Problems, Hints, and Solutions

Dr. Amotz Bar-Noy s Compendium of Algorithms Problems Problems, Hints, and Solutions Chapter 1 Searching and Sorting Problems 1 1.1 Array with One Missing 1.1.1 Problem Let A = A[1],..., A[n] be an array

### Cache-Oblivious Traversals of an Array s Pairs

Cache-Oblivious Traversals of an Array s Pairs Tobias Johnson May 7, 2007 Abstract Cache-obliviousness is a concept first introduced by Frigo et al. in [1]. We follow their model and develop a cache-oblivious

### The Lambda Calculus. notes by Don Blaheta. October 12, A little bondage is always a good thing. sk

The Lambda Calculus notes by Don Blaheta October 2, 2000 A little bondage is always a good thing. sk We ve seen that Scheme is, as languages go, pretty small. There are just a few keywords, and most of

### (Refer Slide Time 04:53)

Programming and Data Structure Dr.P.P.Chakraborty Department of Computer Science and Engineering Indian Institute of Technology, Kharagpur Lecture 26 Algorithm Design -1 Having made a preliminary study

### Working with recursion

Working with recursion Readings: HtDP, sections 11, 12, 13 (Intermezzo 2). We can extend the idea of a self-referential definition to defining the natural numbers, which leads to the use of recursion in

### CSE141 Problem Set #4 Solutions

CSE141 Problem Set #4 Solutions March 5, 2002 1 Simple Caches For this first problem, we have a 32 Byte cache with a line length of 8 bytes. This means that we have a total of 4 cache blocks (cache lines)

### STUDENT LESSON A9 Recursion

STUDENT LESSON A9 Recursion Java Curriculum for AP Computer Science, Student Lesson A9 1 STUDENT LESSON A9 Recursion INTRODUCTION: Recursion is the process of a method calling itself as part of the solution

### 15.4 Longest common subsequence

15.4 Longest common subsequence Biological applications often need to compare the DNA of two (or more) different organisms A strand of DNA consists of a string of molecules called bases, where the possible