about summary refs log tree commit diff stats
path: root/cdbc.lisp
diff options
context:
space:
mode:
authorDarren Bane <darren.bane@emdalo.com>2020-08-21 19:40:30 +0100
committerDarren Bane <darren.bane@emdalo.com>2020-08-21 19:40:30 +0100
commite6931993d7193b60881d0303110974b6af6af852 (patch)
treec6ace92a2e93aa13f3b44d32439d93fd29bfaacb /cdbc.lisp
parent5c4dfb5d3e84be9f7e4b9ea8383fcb9de70862aa (diff)
downloadlsp-e6931993d7193b60881d0303110974b6af6af852.tar.gz
Some more ISLisp->CL examples
Diffstat (limited to 'cdbc.lisp')
-rw-r--r--cdbc.lisp10
1 files changed, 10 insertions, 0 deletions
diff --git a/cdbc.lisp b/cdbc.lisp
new file mode 100644
index 0000000..9d790ab
--- /dev/null
+++ b/cdbc.lisp
@@ -0,0 +1,10 @@
+;; Ported from https://rosettacode.org/wiki/Assertions_in_design_by_contract#Eiffel
+;; Arguably not *quite* design-by-contract, but very close in vanilla CL
+(defun average-of-absolutes (values)
+  (declare (list values))
+  (assert (> (length values) 0))
+  (let ((res (/ (reduce #'+ (mapcar #'abs values)) (length values))))
+    (assert (>= res 0))
+    (the fixnum res)))
+;; (average-of-absolutes '(1 3))
+;; (average-of-absolutes '())