Lecture #7 מבוא מורחב.

Slides:



Advertisements
Similar presentations
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 5. 2 List Utilities Scheme built-in procedures –(list x y z...) –(list-ref lst index) –(length lst) –(append.
Advertisements

Lists in Lisp and Scheme a. Lists are Lisp’s fundamental data structures, but there are others – Arrays, characters, strings, etc. – Common Lisp has moved.
Functional Programming. Pure Functional Programming Computation is largely performed by applying functions to values. The value of an expression depends.
CSE 341 Lecture 16 More Scheme: lists; helpers; let/let*; higher-order functions; lambdas slides created by Marty Stepp
Chapter 3 Functional Programming. Outline Introduction to functional programming Scheme: an untyped functional programming language.
מבוא מורחב 1 Lecture #7. מבוא מורחב 2 The rational number abstraction Wishful thinking: (make-rat ) Creates a rational number (numer ) Returns the numerator.
מבוא מורחב 1 Lecture #6. מבוא מורחב 2 Primality testing (application) Know how to test whether n is prime in  (log n) time => Can easily find very large.
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 5. Outline Let* List and pairs manipulations –Insertion Sort Abstraction Barriers –Fractals –Mobile 2.
מבוא מורחב - שיעור 91 Lecture 9 Lists continued: Map, Filter, Accumulate, Lists as interfaces.
SICP Symbolic data Symbol: a primitive type Generalization Symbolic differentiation.
Functional programming: LISP Originally developed for symbolic computing Main motivation: include recursion (see McCarthy biographical excerpt on web site).
Data Abstraction… The truth comes out…. What we’re doing today… Abstraction ADT: Dotted Pair ADT: List Box and Pointer List Recursion Deep List Recursion.
6.001 SICP SICP – September ? 6001-Introduction Trevor Darrell 32-D web page: section.
SICP Data Mutation Primitive and Compound Data Mutators Stack Example non-mutating mutating Queue Example non-mutating mutating.
מבוא מורחב - שיעור 81 Lecture 8 Lists and list operations (continue).
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 5. Outline Abstraction Barriers –Fractals –Mobile List and pairs manipulations –Insertion Sort 2.
Functional programming: LISP Originally developed for symbolic computing First interactive, interpreted language Dynamic typing: values have types, variables.
מבוא מורחב 1 Lecture #8. מבוא מורחב 2 Shall we have some real fun.. Lets write a procedure scramble.. (scramble (list )) ==> ( ) (scramble.
Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section September 2008.
Arbitrarily Long Data Structures: Lists and Recursion CMSC Introduction to Computer Programming October 4, 2002.
1 Append: process  (append list1 list2) (cons 1 (append ‘(2) list2)) (cons 1 (cons 2 (append ‘() list2))) (cons 1 (cons 2 list2)) (define (append list1.
14-October-2002cse Lists © 2002 University of Washington1 Lists CSE 413, Autumn 2002 Programming Languages
Today’s topic: Abstraction Compound Data Data Abstractions: Isolate use of data abstraction from details of implementation Relationship between data abstraction.
מבוא מורחב 1 Lecture #9. מבוא מורחב 2 Symbol: a primitive type constructors: (quote alpha) ==> quote is a special form. One argument: a name. selectors.
Fall 2008Programming Development Techniques 1 Topic 5 Data Abstraction Note: This represents a change in order. We are skipping to chapter 2 without finishing.
1 Data Abstraction. Pairs and Lists. (SICP Sections – 2.2.1)
מבוא מורחב שיעור 7 1 Lecture 7 Data Abstraction. Pairs and Lists. (Sections – 2.2.1)
1 Vectors, binary search, and sorting. 2 We know about lists O(n) time to get the n-th item. Consecutive cons cell are not necessarily consecutive in.
CS 152: Programming Language Paradigms February 12 Class Meeting Department of Computer Science San Jose State University Spring 2014 Instructor: Ron Mak.
Principles Of Programming Languages Lecture 2 Today Design-By-Contract Data Structures: Lists and Pairs Iteration vs. Recursion If we have time: live.
Abstraction A way of managing complexity for large programs A means of separating details of computation from use of computation Types of Abstraction Data.
Additional Scheme examples
Edited by Original material by Eric Grimson
CS 550 Programming Languages Jeremy Johnson
Pairs and Lists. Data Abstraction. SICP: Sections – 2.2.1
PPL Lecture Notes: Chapter 3 High-Order Procedures Revisited.
PPL Lazy Lists.
Racket CSC270 Pepper major portions credited to
September 4, 1997 Programming Languages (CS 550) Lecture 6 Summary Operational Semantics of Scheme using Substitution Jeremy R. Johnson TexPoint fonts.
Lecture 14 - Environment Model (cont.) - Mutation - Stacks and Queues
Lists in Lisp and Scheme
CS 270 Math Foundations of CS Jeremy Johnson
Env. Model Implementation
6.001 SICP Data abstractions
The Metacircular Evaluator
Lecture 18 Infinite Streams and
PPL Sequence Interface.
Lecture #6 section pages pages72-77
Lecture #6 מבוא מורחב.
Lecture #8 מבוא מורחב.
The Metacircular Evaluator (Continued)
Streams, Delayed Evaluation and a Normal Order Interpreter
Lecture #9 מבוא מורחב.
Lecture 13 - Assignment and the environments model Chapter 3
Data Mutation Primitive and compound data mutators set! for names
Lecture 14 - Environment Model (cont.) - Mutation - Stacks and Queues
Lecture #6 section pages pages72-77
Mutators for compound data Stack Queue
6.001 SICP Data Mutation Primitive and Compound Data Mutators
Lecture 14: The environment model (cont
6.001 SICP Data abstractions
Announcements Quiz 5 HW6 due October 23
List and list operations (continue).
Today’s topics Abstractions Procedural Data
Functional Programming: Lisp
6.001 SICP Interpretation Parts of an interpreter
Lecture # , , , , מבוא מורחב.
Lecture 13: Assignment and the Environment Model (EM)
Lists in Lisp and Scheme
Presentation transcript:

Lecture #7 מבוא מורחב

The rational number abstraction Wishful thinking: Constructor: Selectors: (make-rat <n> <d>) Creates a rational number <r> (numer <r>) Returns the numerator of <r> (denom <r>) Returns the denominator of <r> מבוא מורחב

A contract (numer (make-rat <n> <d>)) <n> = (denom (make-rat <n> <d>)) = <n> <d> How do we do it ? מבוא מורחב

Using pairs (define (make-rat n d) (cons n d)) (define (numer x) (car x)) (define (denom x) (cdr x)) מבוא מורחב

Alternative implementation (define (add-rat x y) (make-rat (+ (* (numer x) (denom y)) (* (numer y) (denom x))) (* (denom x) (denom y)))) Abstraction Violation (define (add-rat x y) (cons (+ (* (car x) (cdr y)) (* (car y) (cdr x))) (* (cdr x) (cdr y)))) מבוא מורחב

Reducing to lowest terms (define (make-rat n d) (let ((g (gcd n d))) (cons (/ n g) (/ d g)))) מבוא מורחב

Programs that use rational numbers Abstraction barriers Programs that use rational numbers add-rat sub-rat ……. make-rat numer denom car cdr cons מבוא מורחב

How can we implement pairs ? (define (cons x y) (lambda (m) (cond ((= m 0) x) ((= m 1) y) (else (error "Argument not 0 or 1 -- CONS" m)))))) (define (car z) (z 0)) (define (cdr z) (z 1)) מבוא מורחב

The pair constructed by (cons 6 9) is the procedure (lambda (m) (cond ((= m 0) 6) ((= m 1) 9) (else (error “Argument not 0 or 1 -- CONS” m)))) מבוא מורחב

In the book: (define (cons x y) (define (dispatch m) (cond ((= m 0) x) ((= m 1) y) (else (error "Argument not 0 or 1 -- CONS" m)))) dispatch) (define (car z) (z 0)) (define (cdr z) (z 1)) מבוא מורחב

Compound data Ideally want the result of this “gluing” to have the property of closure: “the result obtained by creating a compound data structure can itself be treated as a primitive object and thus be input to the creation of another compound object” מבוא מורחב

Box and pointer diagram Note how pairs have the property of closure – we can use the result of a pair as an element of a new pair: (cons (cons 1 2) 3) 3 2 1 מבוא מורחב

Box and pointer diagram (cons (cons 1 (cons 2 3)) 4) 4 1 3 2 מבוא מורחב

Lists (cons 1 (cons 3 (cons 2 ‘()))) 3 1 2 מבוא מורחב

lists A list is either ‘() (The empty list) A pair whose cdr is a list. Note that lists are closed under operations of cons and cdr. מבוא מורחב

… Lists (list <el1> <el2> ... <eln>) Same as (cons <el1> (cons <el2> (cons … (cons <eln> ‘())))) <el1> <el2> <eln> … מבוא מורחב

Lists Predicates ; null? anytype -> boolean (null? <z>) ==> #t if <z> evaluates to empty list ; pair? anytype -> boolean (pair? <z>) ==> #t if <z> evaluates to a pair ; atom? anytype -> boolean (define (atom? z) (and (not (pair? z)) (not (null? z)))) מבוא מורחב

Lists -- examples (define one-to-four (list 1 2 3 4)) (1 2 3 4) ==> error (car one-to-four) ==> 1 (car (cdr one-to-four)) ==> 2 (cadr one-to-four) ==> 2 (caddr one-to-four) ==> 3 מבוא מורחב

Common Pattern #1: cons’ing up a list (define (enumerate-interval from to) (if (> from to) nil (cons from (enumerate-interval (+ 1 from) to)))) (e-i 2 4) (if (> 2 4) nil (cons 2 (e-i (+ 1 2) 4))) (if #f nil (cons 2 (e-i 3 4))) (cons 2 (e-i 3 4)) (cons 2 (cons 3 (e-i 4 4))) (cons 2 (cons 3 (cons 4 (e-i 5 4)))) (cons 2 (cons 3 (cons 4 nil))) (cons 2 (cons 3 )) (cons 2 ) ==> (2 3 4) 4 3 4 2 3 4 מבוא מורחב

Common Pattern #2: cdr’ing down a list (define (list-ref lst n) (if (= n 0) (car lst) (list-ref (cdr lst) (- n 1)))) (define squares (list 1 4 9 16 25)) (list-ref squares 3) ==> 16 מבוא מורחב

Common Pattern #2: cdr’ing down a list (define (length lst) (if (null? lst) (+ 1 (length (cdr lst))))) (define odds (list 1 3 5 7)) (length odds) ==> 4 מבוא מורחב

Iterative length (define (length items) (define (length-iter a count) (if (null? a) count (length-iter (cdr a) (+ 1 count)))) (length-iter items 0)) מבוא מורחב

Cdr’ing and Cons’ing Examples (define (append list1 list2) (cond ((null? list1) list2) ; base (else (cons (car list1) ; recursion (append (cdr list1) list2))))) (append (list 1 2) (list 3 4)) (cons 1 (append (2) (3 4))) (cons 1 (cons 2 (append () (3 4)))) (cons 1 (cons 2 (3 4))) ==> (1 2 3 4) T(n) = (n)

Reverse (reverse (list 1 2 3 4)) ==> (4 3 2 1) (define (reverse lst) (cond ((null? lst) lst) (else (append (reverse (cdr lst)) (list (car lst))))))) (reverse (list 1 2 3)) (append (reverse (2 3)) (1)) (append (append (reverse (3)) (2)) (1)) (append (append (append (reverse ()) (3)) (2)) (1)) Append: T(n) = c*n  (n) Reverse: T(n) = c*(n-1) + c*(n-2) … c*1  (n2)

Shall we have some real fun .. Lets write a procedure scramble.. (scramble (list 0 1 0 2)) ==> (0 0 0 1) (scramble (list 0 0 0 2 3 1 0 0 8 1)) ==> (0 0 0 0 0 3 0 0 0 8) (scramble (list 0 1 2 3 4 5 6 7)) ==> (0 0 0 0 0 0 0 0) (scramble (list 0 1 2 1 2 1 2 1 2)) ==> ( 0 0 0 2 2 2 2 2 2) מבוא מורחב

Ok ok Each number in the argument is treated as backword index from its own position to a point earlier in the tup. The result at each position is found by counting backward from the current position according to this index ==> No number can be greater than its index מבוא מורחב

tup = (0 1 2 1) rev-pre = () (cons 0 …. tup = (1 2 1) rev-pre = (0) (cons 0 (cons 0 tup = (2 1) rev-pre = (1 0) (cons 0 (cons 0 (cons 0 tup = (1) rev-pre = (2 1 0) (cons 0 (cons 0 (cons 0 (cons 2 tup = ( ) rev-pre = (1 2 1 0) (cons 0 (cons 0 (cons 0 (cons 2 ())))) מבוא מורחב

(define (scramble-i tup rev-pre) (if (null? tup) '() (cons ( (cons (car tup) rev-pre) (car tup)) ( (cdr tup) (cons (car tup) rev-pre))))) list-ref scramble-i (define (scramble tup) (scramble-b tup '())) מבוא מורחב