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.