mapb1.scm added by sbwhitecap on Wed Feb 3 06:32:02 2016

(define mapb1
  (lambda (proc lis)
    (letrec ((go
               (lambda (proc lis)
                 (if (null? lis)
                      lis
                      (call-with-values
                        (lambda ()
                          (proc (car lis)))
                        (lambda (newcar brk)
                          (if (eq? brk #t)
                            (list newcar)
                            (cons newcar (go proc (cdr lis))))))))))
      (go proc lis))))

(define l (list 1 2 3 4 5 6 7 8 9 10))
(display
  (mapb1 (lambda (v)
           (if (= v 4)
             (values 42 #t)
             (values (+ v  1) #f))) l))
(newline)