Scheme - Função de mapa para aplicar uma função a elementos em uma lista aninhada

Estou tentando escrever uma função de mapeamento no esquema que aplica uma função a cada valor em uma lista aninhad

Por exemplo,(map number? '(3 (2 A) 2 Z) deve retornar(#t (#t #f) #t #f)

Aqui está o que eu tenho até agora:

(define (map fun lst)
    (if (null? lst) '()
        (if (list? (car lst)) 
            (cons (map fun (car lst)) (map fun (cdr lst)))
                 (cons (fun (car lst)) (map fun (cdr lst))))))

Funciona se a lista aninhada estiver na frente da lista. Por exemplo(map number? '((3 A) 2 Z)) retorna corretamente((#t #f) #t #f)

O problema ocorre quando a lista aninhada ocorre após outro elemento na lista original. Por exemplo(map number? '(3 A (2 Z))) retorna incorretamente(#t #f #f) [O resultado deve ser(#t #f (#t #f))]

Como posso alterar meu algoritmo para corrigir isso?

questionAnswers(2)

yourAnswerToTheQuestion