diff options
Diffstat (limited to 'dbc2.lsp')
-rw-r--r-- | dbc2.lsp | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/dbc2.lsp b/dbc2.lsp index 477dc38..5a2699d 100644 --- a/dbc2.lsp +++ b/dbc2.lsp @@ -1,23 +1,19 @@ -(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 '<list> #'abs values)) -(defun sum (sequence) +(import "macro") ; For unless +(defmacro assert (test) + `(unless ,test + (error "assert: value is false." ',test))) +(defun my-sum (sequence) (let ((res 0)) (for ((xs sequence (cdr xs))) - ((null xs) res) - (setq res (+ res (car xs)))))) + ((null xs) res) + (setq res (+ res (car xs)))))) (defun average-of-absolutes (values) - (the <list> 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 <fixnum> res))) + (assure <list> values) + ;; requires non-null list + (assert (> (length values) 0)) + (let ((res (quotient (my-sum (mapcar #'abs values)) (length values)))) + ;; must ensure positive result + (assert (>= res 0)) + (assure <number> res))) ;; (average-of-absolutes '(1 3)) ;; (average-of-absolutes '()) |