;;; Michael Wollowski (define (rl)(load "day10.ss")) (define list-recur (lambda (init f) (letrec ([g (lambda (ls) (if (null? ls) init (f (car ls) (g (cdr ls)))))]) g))) ;;; One flag for all calls, once you set it, it is set. ;;; similar to static fields in Java classes (define remove-last-2 (list-recur () (let ([flag #f]) (lambda (x y) (if (and (not flag) (eq? x 2)) (begin (set! flag #t) y) (cons x y)))))) ;;; Now, we create a separate flag for each call to remove-last-2 ;(define remove-last-2 (lambda (ls) ; (let ([flag #f]) ; ((list-recur () ; (lambda (x y) ; (if (and (not flag) ; (eq? x 2)) ; (begin (set! flag #t) ; y) ; (cons x y)))) ; ls))))