Heterogeneous lists are those that can contain different kinds of data, e.g., symbols or numbers.
Solution 1: Use the definition of symbol-or-number.
; A list of symbols or numbers (lo-sym+num) is either ; - empty ; - (cons f r) ; where f is a symbol-or-number, r is a lo-sym+num
Solution 2: Have one case for each kind of item.
; A list of symbols or numbers (lo-sym+num) is either ; - empty ; - (cons f r) ; where f is a symbol, r is a lo-sym+num ; - (cons f r) ; where f is a number, r is a lo-sym+num
When you develop programs, you should use the template corresponding to the definition you choose.
     (define (f losn)
        (cond
           [(empty? losn) ...]
           [else          ...(first losn)...(f (rest losn))]))
     
     where f probably calls another function on
     (first losn) that consumes a symbol-or-number.
     
     (define (f losn)
        (cons
           [(empty? losn)          ...]
           [(symbol? (first losn)) ...(first losn)...(f (rest losn))...]
           [(number? (first losn)) ...(first losn)...(f (rest losn))...]))
     
     The answers of the two last cases typically, but not necessarily,
     have the same recursive calls.