(defun count-of (l x) (if (null l) 0 (+ (if (equal x (car l)) 1 0) (count-of (cdr l) x)))) (defun sum-of (l) (if (null l) 0 (+ (car l) (sum-of (cdr l))))) (defun odd-of (l &optional keep) (if (null l) keep (odd-of (cdr l) (if (oddp (car l)) (cons (car l) keep) keep)))) (defun count-of-r% (l x) (count-of (flatten l) x)) (defun sum-of-r% (l) (sum-of (flatten l))) (defun odd-of-r% (l) (length (odd-of (flatten l)))) (defun flatten (l) (let (out) (visit-r l #'(lambda (x) (push x out))) out)) (defun visit-r (thing fn) (if (atom thing) (funcall fn thing) (dolist (one thing) (visit-r one fn)))) (defun count-of-r (l x) (let ((out 0)) (visit-r l #'(lambda (one) (if (equal one x) (incf out)))) out)) (defun sum-of-r (l) (let ((out 0)) (visit-r l #'(lambda (x) (incf out x))) out)) (defun odd-of-r (l) (let ((n 0)) (visit-r l #'(lambda(x) (if (oddp x) (incf n)))) n))