CS603 Programming Language Organization

8
Lecture 16 Spring 2004 Department of Computer Science CS603 Programming Language Organization

description

CS603 Programming Language Organization. Lecture 16 Spring 2004 Department of Computer Science. Overview. Questions Finishing µ-Scheme Reading for next time. HOF for Polymorphism: List of Functions. ->(val mk-set-ops (lambda (eqfun) (list2 (lambda (x s) ; member? - PowerPoint PPT Presentation

Transcript of CS603 Programming Language Organization

Page 1: CS603 Programming Language Organization

Lecture 16Spring 2004

Department of Computer Science

Lecture 16Spring 2004

Department of Computer Science

CS603 Programming Language Organization

CS603 Programming Language Organization

Page 2: CS603 Programming Language Organization

©2004 Joel Jones©2004 Joel Jones

• Questions

• Finishing µ-Scheme

• Reading for next time

• Questions

• Finishing µ-Scheme

• Reading for next time

OverviewOverview

Page 3: CS603 Programming Language Organization

©2004 Joel Jones©2004 Joel Jones

HOF for Polymorphism:List of Functions

HOF for Polymorphism:List of Functions

->(val mk-set-ops (lambda (eqfun) (list2 (lambda (x s) ; member?

(exists? ((curry eqfun) x) s)) (lambda (x s) ; add-element

(if (exists? ((curry eqfun) x) s) s (cons x s)))))->(val list-of-al-ops (mk-set-ops =alist?))

->(val mk-set-ops (lambda (eqfun) (list2 (lambda (x s) ; member?

(exists? ((curry eqfun) x) s)) (lambda (x s) ; add-element

(if (exists? ((curry eqfun) x) s) s (cons x s)))))->(val list-of-al-ops (mk-set-ops =alist?))

Pair Up: • Draw a diagram (of environment, cons cells and closures) for (val list-of-al-ops (mk-set-ops =alist?))

Pair Up: • Draw a diagram (of environment, cons cells and closures) for (val list-of-al-ops (mk-set-ops =alist?))

Page 4: CS603 Programming Language Organization

©2004 Joel Jones©2004 Joel Jones

HOF for Polymorphism:List of Functions

HOF for Polymorphism:List of Functions

-> (val al-member? (car list-of-al-ops))-> (val al-add-element (cadr list-of-al-ops))So uses will look like:->(val emptyset ‘())->(val s (al-add-element ‘((U Thant)((I Ching))) emptyset)

Pair Up: What is the value of s?Pair Up: What is the value of s?(((U Thant) (I Ching)))(((U Thant) (I Ching)))

(((E coli) (I Ching)) ((U Thang) (I Ching)))(((E coli) (I Ching)) ((U Thang) (I Ching)))

->(val s (al-add-element ‘((E coli)(I Ching)) s))->(val s (al-add-element ‘((E coli)(I Ching)) s))

Pair Up: What is the value of s?Pair Up: What is the value of s?

Page 5: CS603 Programming Language Organization

©2004 Joel Jones©2004 Joel Jones

A polymorphic, higher-order sort

A polymorphic, higher-order sort

->(define mk-insertion-sort (lt) (letrec ( (insert (lambda (x l) (if (null? l) (list1 x) (if (lt x (car l)) (cons x l) (cons (car l) (insert x (cdr l))))))) (sort (lambda (l) (if (null? l) ’() (insert (car l) (sort (cdr l))))))) sort))

->(define mk-insertion-sort (lt) (letrec ( (insert (lambda (x l) (if (null? l) (list1 x) (if (lt x (car l)) (cons x l) (cons (car l) (insert x (cdr l))))))) (sort (lambda (l) (if (null? l) ’() (insert (car l) (sort (cdr l))))))) sort))

Page 6: CS603 Programming Language Organization

©2004 Joel Jones©2004 Joel Jones

A polymorphic, higher-order sort (cont.)

A polymorphic, higher-order sort (cont.)

->(val sort< (mk-insertion-sort <))->(val sort> (mk-insertion-sort >))->(sort< ‘(6 9 1 7 4 3 8 5 2 10))(1 2 3 4 5 6 7 8 9 10)->(sort> ‘(6 9 1 7 4 3 8 5 2 10))(10 9 8 7 6 5 4 3 2 1)->(define pair< (p1 p2) (or (< (car p1) (car p2) (and (= (car p1) (car p2)) (< (cadr p1) (cadr p2)))))->((mk-insertion-sort pair<) ‘((4 5) (2 9) (3 3) (8 1) (2 7)))((2 7) (2 9) (3 3) (4 5) (8 1))

->(val sort< (mk-insertion-sort <))->(val sort> (mk-insertion-sort >))->(sort< ‘(6 9 1 7 4 3 8 5 2 10))(1 2 3 4 5 6 7 8 9 10)->(sort> ‘(6 9 1 7 4 3 8 5 2 10))(10 9 8 7 6 5 4 3 2 1)->(define pair< (p1 p2) (or (< (car p1) (car p2) (and (= (car p1) (car p2)) (< (cadr p1) (cadr p2)))))->((mk-insertion-sort pair<) ‘((4 5) (2 9) (3 3) (8 1) (2 7)))((2 7) (2 9) (3 3) (4 5) (8 1))

Page 7: CS603 Programming Language Organization

µ-Scheme Concrete Syntax

µ-Scheme Concrete Syntax

toplevel ::= exp | (use file-name) | (val variable-name exp) | (define function-name (formals) exp)exp ::= literal | variable-name | (if exp exp exp) | (while exp exp) | (set variable-name exp) | (begin {exp}) | (exp {exp}) | (let-keyword ({(variable-name exp)}) exp) | (lambda (formals) exp) | primitivelet-keyword ::= let | let* | letrec

toplevel ::= exp | (use file-name) | (val variable-name exp) | (define function-name (formals) exp)exp ::= literal | variable-name | (if exp exp exp) | (while exp exp) | (set variable-name exp) | (begin {exp}) | (exp {exp}) | (let-keyword ({(variable-name exp)}) exp) | (lambda (formals) exp) | primitivelet-keyword ::= let | let* | letrec

Page 8: CS603 Programming Language Organization

µ-Scheme Concrete Syntax (cont.)

µ-Scheme Concrete Syntax (cont.)

formals ::= {variable-name}literal ::= integer | #t | #f | ‘S-exp | (quote S-exp)S-exp ::= literal | symbol-name | ({S-exp})primitive ::= + | - | * | / | = | < | > | print | error | car | cdr | cons | number? | symbol? | pair? | null? | boolean? | procedure?integer ::= sequence of digits, possibly prefixed with a minus sign*-name ::= sequence of characters not an integer and not containing (, ), ;, or whitespace

formals ::= {variable-name}literal ::= integer | #t | #f | ‘S-exp | (quote S-exp)S-exp ::= literal | symbol-name | ({S-exp})primitive ::= + | - | * | / | = | < | > | print | error | car | cdr | cons | number? | symbol? | pair? | null? | boolean? | procedure?integer ::= sequence of digits, possibly prefixed with a minus sign*-name ::= sequence of characters not an integer and not containing (, ), ;, or whitespace