(defun raise-loop (n m) (let ((out 1)) (dotimes (i m out) (setf out (* out n))))) (defun raise-recurse1 (n m) (if (< m 1) 1 (* n (raise-recurse1 n (1- m))))) (defun raise-recurse2 (n m &optional (out 1)) (if (< m 1) out (raise-recurse2 n (1- m) (* n out)))) (defun raise-helper (n m) (labels ((worker (m1 out) (if (< m1 1) out (worker (1- m1) (* n out))))) (worker m 1))) (defun visit (fn x) (if (atom x) (funcall fn x) (dolist (one x) (visit fn one)))) (defun count-anywhere (l goal) (let ((out 0)) (labels ((count1 (x) (if (eql x goal) 1 0)) (counts (x) (incf out (count1 x)))) (visit #'counts l) out))) ;; CL-USER> (raise-loop 2 3) ;; 8 ;; CL-USER> (raise-recurse1 2 3) ;; 8 ;; CL-USER> (raise-recurse2 2 3) ;; 8 ;; CL-USER> (raise-helper 2 3) ;; 8 ;; CL-USER> (raise-helper 2 4) ;; 16 ;; (count-anywhere '((c 1 ) (((c d c) e ) c) c (c (c ))) 'c) ;; 7 (defun median (num-set) (let* ((num-set (sort num-set #'<)) (set-length (length num-set)) (middle (truncate set-length 2))) (if (oddp set-length) (nth middle num-set) (/ (+ (nth middle num-set) (nth (- middle 1) num-set)) 2))))