(define (rl) (load "subst.ss")) (define subst-leftmost (lambda (new old ls pred) (letrec ([do-cdr (lambda (ls) (let ([result-cdr (local (cdr ls))]) (cons (car result-cdr) (cons (car ls) (cdr result-cdr)))))] [local (lambda (ls) (cond [(null? ls) '(#f)] [(or (symbol? (car ls)) (number? (car ls))) (if (pred old (car ls)) (cons #t (cons new (cdr ls))) (do-cdr ls))] [else (let ([result (local (car ls))]) (if (car result) (cons #t (cons (cdr result) (cdr ls))) (do-cdr ls)))]))]) (cdr (local ls)))))