Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS 403: Programming Languages

Similar presentations


Presentation on theme: "CS 403: Programming Languages"— Presentation transcript:

1 CS 403: Programming Languages
Lecture 14 Fall 2003 Department of Computer Science University of Alabama Joel Jones

2 Overview Higher order functions for polymorphism Lecture 14
©2003 Joel Jones

3 Higher-order functions for polymorphism
Implementing sets Constructing mono-morphic sets requires definition of equality—simple if primitive elements ->(define emptyset ‘()) ->(define member? (lambda (x s) (exists? ((curry equal? x) s))) ->(define add-element (lambda (x s) (if (member? X s) s (cons x s)))) ->(define union (lambda (s1 s2) (foldl add-element s1 s2))) ->(define set-from-list (lambda (l) (foldl add-element ‘() l))) Problem is equality for complex types Lecture 14 ©2003 Joel Jones

4 HOF for Polymorphism: Parameter per Function
(define member? (lambda (x s eqfun) (exists? ((curry eqfun) x) s))) (define add-element (lambda (x s eqfun) (if (member? x s eqfun) s (cons s x)))) So uses will look like: (member? X s equal?) or (add-element x s =alist?) This part is really difficult for the students. I need to have them read ahead of time and do labs. Look at the Little Schemer to see if they have any helpful exercises. Lecture 14 ©2003 Joel Jones

5 Association Lists (define bind (lambda (x y alist) (if (null? alist)
(list1 (list2 x y)) (if (equal? x (caar alist)) (cons (list2 x y) (cdr alist)) (cons (car alist) (bind x y (cdr alist)))))) (define find (lambda (x alist) (if (null? alist) ‘() (car (cdar alist)) (find x (cdr alist)))))) Lecture 14 ©2003 Joel Jones

6 HOF for Polymorphism: Part of “object”
->(define mk-set (lambda (eqfun elements) (cons eqfun elements))) ->(define eqfun-of (lambda (set) (car set))) ->(define elements-of (lambda (set) (cdr set))) ->(define emptyset (lambda (eqfun) (mk-set eqfun ‘()))) Lecture 14 ©2003 Joel Jones

7 HOF for Polymorphism: Part of “object”
Pair Up: • What was type of the function “exists?” ? (define exists? (lambda (p? L)…) (define member? (lambda (x s) (exists? (curry (eqfun-of s)) x) (elements-of s)))) (define add-element? (lambda (x s) (if (member? x s) s (mk-set (eqfun-of s) (cons x (elements-of s)))))) Lecture 14 ©2003 Joel Jones

8 HOF for Polymorphism: Part of “object”
So uses will look like: (define alist-empty (emptyset =alist?)) (define s (add-element ‘((U Thant) (I Ching)) alist-empty) returns (<procedure> ((U Thang) (I Ching))) (define s (add-element ‘((Hello Dolly)))) (<procedure> ((Hello Dolly) (U Thang) (I Ching))) (member? ‘((I Ching))) #t Advantage is that only constructor (here, emptyset) requires extra parameter Lecture 14 ©2003 Joel Jones

9 Sorting (define insert (lambda (x l) (if (null? l) (list1 x)
(if (< x (car l)) (cons x l) (cons (car l) (insert x (cdr l))))))) (define insertion-sort (lambda (l) (if (null? l) ‘() (insert (car l) (sort (cdr l)))))) (insertion-sort ‘( )) -> ( ) Lecture 14 ©2003 Joel Jones


Download ppt "CS 403: Programming Languages"

Similar presentations


Ads by Google