;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; To use 'define': e.g. (define age 20 ~ ~~~ ~~~~ ~~~~ ~~~ 60 ~) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defconstant ~ 0) (defconstant ~~ 1) (defconstant ~~~ 2) (defconstant ~~~~ 3) (defconstant ~~~~~ 4) (defconstant ~~~~~~ 5) (defconstant ~~~~~~~ 6) (defconstant ~~~~~~~~ 7) (defconstant ~~~~~~~~~ 8) (defconstant ~~~~~~~~~~ 9) (defconstant ~~~~~~~~~~~ 10) (defconstant ~~~~~~~~~~~~ 11) (defconstant ~~~~~~~~~~~~~ 12) (defconstant ~~~~~~~~~~~~~~ 13) (defconstant ~~~~~~~~~~~~~~~ 14) (defconstant ~~~~~~~~~~~~~~~~ 15) (defconstant ~~~~~~~~~~~~~~~~~ 16) (defconstant ~~~~~~~~~~~~~~~~~~ 18) (defconstant ~~~~~~~~~~~~~~~~~~~ 19) (defconstant ~~~~~~~~~~~~~~~~~~~~ 20) (defconstant ~~~~~~~~~~~~~~~~~~~~~ 21) (defconstant ~~~~~~~~~~~~~~~~~~~~~~ 22) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~ 23) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~~ 24) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~~~ 25) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~~~~ 26) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 27) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 28) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 29) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 31) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 64) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 128) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 256) (defconstant ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 512) (defparameter *dists* (make-hash-table)) (defstruct (dist9 (:print-function dist9-print)) name max min distribution) (defun dist9-print (struct stream depth) (format stream "Name:~A , Max:~A , Min:~A , Distribution:~A" (dist9-name struct) (dist9-max struct) (dist9-min struct) (let ((tmplist nil)) (dotimes (element (length (dist9-distribution struct)) tmplist) (setf tmplist (append tmplist (list (float (aref (dist9-distribution struct) element))))))))) (defmacro define (name &body body) `(let* ((name ',name) (dist1 ',body) (minfp (first dist1)) (maxfp (nth (- (length dist1) 2) dist1)) (pdfp (remove minfp (remove maxfp dist1))) (eval-pdfp (mapcar (lambda (x) (eval x)) pdfp)) (new (make-dist9 :name name :max maxfp :min minfp :distribution (make-array (length pdfp) :initial-contents eval-pdfp)))) (setf (gethash name *dists*) new) new))