Начните со списка. Если он пуст, оставь его. Если первый элемент является списком, то вы хотите вызвать свою функцию рекурсивно. Если первый элемент совпадает с тем, что вы ищете, заключите замену в рекурсивный вызов вашей функции в остальной части списка - вам нужно продолжать поиск. Если ни одно из более ранних условий не выполняется, заключите первый элемент в рекурсивный вызов вашей функции для остальной части списка.
(define (find-replace a b list)
(cond
((null? list) '())
((list? (car list)) (cons (find-replace a b (car list)) (find-replace a b (cdr list))))
((eq? (car list) a) (cons b (find-replace a b (cdr list))))
(else
(cons (car list) (find-replace a b (cdr list))))))