about summary refs log tree commit diff stats
path: root/dbc2.lsp
diff options
context:
space:
mode:
Diffstat (limited to 'dbc2.lsp')
-rw-r--r--dbc2.lsp32
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 '())