



Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
A part of the cs 421 spring 2005 course notes on continuations and control. It covers various topics such as imperative version of fact-iter, cps style code, environment, cps form of remove, first-class continuations, call/cc, and co-routines.
Typology: Study notes
1 / 5
This page cannot be seen from the preview
Don't miss anything!




CS 421 Spring 2005 2
CS 421 Spring 2005 3
CS 421 Spring 2005 4
CS 421 Spring 2005 5
(define remove (lambda (s los k) (if (null? los) (k '( )) (if (eq? s (car los)) (remove s (cdr los) k) (remove s (cdr los) (lambda (v) (k (cons (car los) v))) )))))
CS 421 Spring 2005 6
(define s-reg ’) (define los-reg ’) (define k-reg ’*) (define remove (lambda (s los k) (set! s-reg s) (set! los-reg los) (set! k-reg k) (remove/reg)))
CS 421 Spring 2005 7
(define remove/reg (lambda ( ) (if (null? los-reg) (k '( )) (if (eq? s-reg (car los-reg)) (begin (set! los-reg (cdr los-reg)) (remove/reg)) (begin (set! k (lambda (v) (k-reg (cons (car los-reg) v)))) (set! los-reg (cdr los-reg)) (remove/reg))))
Wrong!! Why?
CS 421 Spring 2005 8
fun env fun env fun env
CS 421 Spring 2005 9
CS 421 Spring 2005 10
(define fib (lambda (n) (if (or (= n 0) (= n 1)) n (+ (fib (– n 1)) (fib (– n 2))))) (define fib (lambda (n k) (if (or (= n 0) (= n 1)) (k n) (fib (– n 1) (lambda (v) (k (+ v (fib (– n 2)))) )) )))
CS 421 Spring 2005 11
(define fib (lambda (n k) (if (or (= n 0) (= n 1)) (k n) (fib (– n 1) (lambda (v) (fib (– n 2) (lambda (w) k (+ v w)))) )))
CS 421 Spring 2005 12
(define fib (lambda (n) (car fib*(n))))
(define fib* (lambda (n) (cond ((= n 0) (cons 0 0)) ((= n 1) (cons 0 1)) (else (let ((x (fib* (– n 1)))) (cons (+ (car x) (cdr x)) (car x)))))))
Exercise: convert to cps form!
CS 421 Spring 2005 19
CS 421 Spring 2005 20
(define (make-coroutine (lambda (co-body) (letrec ((state (lambda ( ) (co-body resume))) (resume (lambda (that) (call/cc (lambda (this) (set! state this) (that))) ))) (lambda ( ) (state)) )))
CS 421 Spring 2005 21
(define A (make-coroutine (lambda (resume) (….) (resume B) (….) (resume B) (….) ‘finito)))
(define B (make-coroutine (lambda (resume) (….) (resume A) (….) (resume A) (….) ‘finito)))
CS 421 Spring 2005 22
CS 421 Spring 2005 23
(let ((cont #f)) (call/cc (lambda (k) (set! cont k))) (cont #f) )
CS 421 Spring 2005 24
CS 421 Spring 2005 25
Also called catch/throw exceptions (define find-symbol (lambda (id tree) (letrec ((find (lambda (tree) (if (pair? tree) (or (find (car tree)) (find (cdr tree))) (if (eq? tree id) (throw 'find t) f ))) (catch 'find (find tree)) ) CS 421 Spring 2005 26
CS 421 Spring 2005 27
CS 421 Spring 2005 28
CS 421 Spring 2005 29