(defmacro unless (test :rest body) `(if (not ,test) (progn ,@body))) ;;(defun reduce (function sequence) ;; (let ((res 0)) ;; (for ((xs sequence (cdr xs))) ;; ((null xs) res) ;; (setq res (+ res (car xs)))))) ;;(reduce #'+ (map ' #'abs values)) (defun sum (sequence) (let ((res 0)) (for ((xs sequence (cdr xs))) ((null xs) res) (setq res (+ res (car xs)))))) (defun average-of-absolutes (values) (the values) (unless (> (length values) 0) (error "average-of-absolutes requires non-null list" values)) (let ((res (quotient (sum values) (length values)))) (unless (>= res 0) (error "average-of-absolutes must ensure positive result" res)) (the res))) ;; (average-of-absolutes '(1 3)) ;; (average-of-absolutes '())