#lang racket (require racket/trace) (define arithmetic (lambda (n proc) (proc n 42))) (define member? (lambda (e ls) (if (null? ls) #f (if (pair? (car ls)) (if (member? e (car ls)) #t (member? e (cdr ls))) (if (eq? e (car ls)) #t (member? e (cdr ls))))))) (define member2? (lambda (e ls) (if (null? ls) #f (if (pair? (car ls)) (or (member2? e (car ls)) (member2? e (cdr ls))) (or (eq? e (car ls)) (member2? e (cdr ls))))))) (define member3? (lambda (e ls) (cond [(null? ls) #f] [(pair? (car ls)) (or (member3? e (car ls)) (member3? e (cdr ls)))] [else (or (eq? e (car ls)) (member3? e (cdr ls)))]))) (define flatten (lambda (ls) (cond [(null? ls) '()] [(pair? (car ls)) (append (flatten (car ls)) (flatten (cdr ls)))] [else (cons (car ls) (flatten (cdr ls)))]))) (define flatten2 (lambda (ls) (if (null? ls) '() (if (pair? (car ls)) (flatten2 (append (car ls) (cdr ls))) (cons (car ls) (flatten2 (cdr ls))))))) (trace flatten flatten2)