Я пытаюсь написать функцию сопоставления в схеме, которая применяет функцию к каждому значению во вложенном списке.
Например, (map number? '(3 (2 A) 2 Z)
должно вернуть (#t (#t #f) #t #f)
Вот что у меня есть до сих пор:
(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))))))
Это работает, если вложенный список находится в начале списка. Например, (map number? '((3 A) 2 Z))
правильно возвращает ((#t #f) #t #f)
Проблема возникает, когда вложенный список располагается после другого элемента в исходном списке. Например, (map number? '(3 A (2 Z)))
неправильно возвращает (#t #f #f)
[результат должен быть (#t #f (#t #f))
]
Как я могу изменить свой алгоритм, чтобы исправить это?