(define (equal? a b) (cond ((and (null? a) (null? b)) #t) ((and (symbol? a) (symbol? b)) (eq? a b)) ((and (list? a) (list? b)) (if (or (null? a) (null? b)) #f (and (equal? (car a) (car b)) (equal? (cdr a) (cdr b))))) (else #f)))