Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;; product with break and O(1) case for a zero operand
- ;; call/cc
- (define (product-cc ls)
- (call-with-current-continuation
- (lambda (break)
- (cond ((null? ls) 1)
- ((= (car ls) 0) (break 0))
- (else (* (car ls) (product-cc (cdr ls))))))))
- ;; continuation-passing style
- (define (product-cps ls k break)
- (cond ((null? ls) (k 1))
- ((= (car ls) 0) (break 0))
- (else (product-cps (cdr ls) (lambda (x) (k (* (car ls) x))) break))))
- (define (product-cps2 ls k)
- (let ((break k))
- (let f ((ls ls) (k k))
- (cond ((null? ls) (k 1))
- ((= (car ls) 0) (break 0))
- (else (f (cdr ls)
- (lambda (x)
- (k (* (car ls) x)))))))))
- (define (product ls)
- (product-cps ls (lambda (x) x) (lambda (x) x)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement