(define car&cdr
(lambda (s slst errval)
(letrec ((carHelp
(lambda (s slst final)
(cond
((null? slst) errval) ;base case
((list? (car slst)) (> (count-occurrences s (car slst)) 0)
(carHelp s (car slst) (string-append "(car " final ")"))
(carHelp s (cdr slst) (string-append "(cdr " final ")")))
((equal? s (car slst))
(string-append "(lambda (lst)"
"(car " final ")")
)
(else (carHelp s (cdr slst) (string-append "(cdr " final ")")))
)
)))
(carHelp s slst "slst))")
)))
(define count-occurrences
(lambda (x alist)
(cond
((null? alist) 0) ;base case - empty list
; recursive cases
((list? (car alist)) (+ (count-occurrences x (car alist)) (count-occurrences x (cdr alist))))
((equal? x (car alist)) (+ 1 (count-occurrences x (cdr alist))))
(else (count-occurrences x (cdr alist)))
)))