3.) In Scheme, procedures can be passed as arguments just like other kinds of data. Write a Scheme procedure filter* that takes a possibly-nested list and a predicate on atoms, and returns a list with the same nesting structure as the input list, with all the atoms (and only the atoms) from the input list satisfying the predicate. Examples:
(filter* '(1 2 3) number?) => (1 2 3) (filter* '(1 2 quidnunc 3) number?) => (1 2 3) (filter* '(1 ((2)) 3) number?) => (1 ((2)) 3) (filter* '(1 ((2)) ((quidnunc)) 3) number?) => (1 ((2)) (()) 3) (filter* '(1 ((2)) ((quidnunc)) 3) symbol?) => ((()) ((quidnunc)))