(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE (DEFPACKAGE "VARIATES" (USE "LISP" "PT") (NICKNAMES "VR") (PREFIX-NAME "VR")))(il:filecreated "30-Nov-88 14:40:39" il:{qv}<idl>next>variates.\;9 9960         il:|changes| il:|to:|  (il:structures variate precent percent general variate-methods ordered-variate balance amount counts ranks grade category) (il:vars il:variatescoms) (il:functions print-variate define-variate make-category make-general make-balance make-amount make-percent make-counts make-ranks make-grade percent-member-p make-variate-constructor within-variate-range number-member-p number-greater-p amount-member-p counts-member-p grade-member-p grade-greater-p category-member-p) (il:variables *percent-methods* *general-methods* *balance-methods* *amount-methods* *counts-methods* *ranks-methods* *grade-methods* *category-methods*) (il:define-types variates) (xcl:file-environments "VARIATES")      il:|previous| il:|date:| "30-Nov-88 14:04:40" il:{qv}<idl>next>variates.\;8); Copyright (c) 1988 by Xerox Corporation.  All rights reserved.(il:prettycomprint il:variatescoms)(il:rpaqq il:variatescoms ((il:* il:|;;| "Variate objects") (il:define-types variates) (il:functions define-variate) (il:structures variate variate-methods ordered-variate) (il:functions print-variate within-variate-range number-member-p number-greater-p) (il:functions make-variate-constructor) (il:coms (il:* il:|;;| "general variate") (il:variables *general-methods*) (il:structures general) (il:functions make-general)) (il:coms (il:* il:|;;| "balances") (il:variables *balance-methods*) (il:structures balance) (il:functions make-balance)) (il:coms (il:* il:|;;| "amounts ") (il:variables *amount-methods*) (il:structures amount) (il:functions make-amount amount-member-p)) (il:coms (il:* il:|;;| "percents ") (il:variables *percent-methods*) (il:structures percent) (il:functions make-percent percent-member-p)) (il:coms (il:* il:|;;| "counts  ") (il:variables *counts-methods*) (il:structures counts) (il:functions make-counts counts-member-p)) (il:coms (il:* il:|;;| "ranks  ") (il:variables *ranks-methods*) (il:structures ranks) (il:functions make-ranks)) (il:coms (il:* il:|;;| "grades  ") (il:variables *grade-methods*) (il:structures grade) (il:functions make-grade grade-member-p grade-greater-p)) (il:coms (il:* il:|;;| "categories  ") (il:variables *category-methods*) (il:structures category) (il:functions make-category category-member-p)) (eval-when (load compile) (il:p (export (quote (variates define-variate variate variate-p variate-name variate-documentation variate-methods ordered-variate ordered-variate-p general general-p make-general balance balance-p make-balance amount amount-p make-amount percent percent-p make-percent counts counts-p make-counts ranks ranks-p make-ranks grade grade-p make-grade category category-p make-category)) (find-package "VARIATES")))) (xcl:file-environments "VARIATES")))(il:* il:|;;| "Variate objects")(xcl:def-define-type variates "IDL variate(s)")(xcl:defdefiner define-variate variates (name documentation type &rest keyword-args) (il:bquote (defparameter (il:\\\, name) (funcall (function (il:\\\, (make-variate-constructor type))) :name (quote (il:\\\, name)) :documentation (il:\\\, documentation) (il:\\\,@ keyword-args)))))(defstruct (variate (:constructor nil) (:copier nil) (:print-function print-variate)) methods name documentation)(defstruct (variate-methods (:conc-name "VM-")) member-p instance-member-p greater-p)(defstruct (ordered-variate (:constructor nil) (:copier nil) (:include variate)) min max)(defun print-variate (variate stream print-level) (declare (ignore print-level)) (write-string "#<" stream) (princ (quote variate) stream) (write-string " " stream) (prin1 (variate-documentation variate) stream) (write-string ", " stream) (prin1 (variate-name variate) stream) (write-string ">" stream))(defun within-variate-range (x ordered-variate) (and (funcall (vm-member-p (variate-methods ordered-variate)) x) (let ((min (ordered-variate-min ordered-variate)) (max (ordered-variate-max ordered-variate)) (greater-p-fn (vm-greater-p ordered-variate))) (and (or (null min) (not (funcall greater-p-fn min x))) (or (null max) (not (funcall greater-p-fn x max)))))))(defun number-member-p (x variate) (declare (ignore variate)) (numberp x))(defun number-greater-p (x y variate) (declare (ignore variate)) (> x y))(defun make-variate-constructor (type) (intern (concatenate (quote string) "MAKE-" (string type)) (find-package "VARIATES")))(il:* il:|;;| "general variate")(defparameter *general-methods* (make-variate-methods :member-p (quote xcl:true) :instance-member-p (quote xcl:true) :greater-p (function (lambda (&rest args) (declare (ignore args)) (error "Unordered variate")))))(defstruct (general (:constructor %make-general) (:include variate (methods *general-methods*))))(defun make-general (&key name documentation) (%make-general :name name :documentation (string documentation)))(il:* il:|;;| "balances")(defparameter *balance-methods* (make-variate-methods :member-p (quote number-member-p) :instance-member-p (quote within-variate-range) :greater-p (quote number-greater-p)))(defstruct (balance (:constructor %make-balance) (:include ordered-variate (methods *balance-methods*))))(defun make-balance (&key name documentation min max) (%make-balance :name name :documentation (string documentation) :min min :max max))(il:* il:|;;| "amounts ")(defparameter *amount-methods* (make-variate-methods :member-p (quote amount-member-p) :instance-member-p (quote within-variate-range) :greater-p (quote number-greater-p)))(defstruct (amount (:constructor %make-amount) (:include ordered-variate (methods *amount-methods*))))(defun make-amount (&key name documentation (min 0) max) (%make-amount :name name :documentation (string documentation) :min min :max max))(defun amount-member-p (x variate) (declare (ignore variate)) (typecase x (float (> x 0.0)) (rational (> x 0))))(il:* il:|;;| "percents ")(defparameter *percent-methods* (make-variate-methods :member-p (quote amount-member-p) :instance-member-p (quote amount-member-p) :greater-p (quote number-greater-p)))(defstruct (percent (:constructor %make-percent) (:include ordered-variate (methods *percent-methods*))))(defun make-percent (&key name documentation (min 0) max) (%make-percent :name name :documentation (string documentation) :min 0.0 :max 1.0))(defun percent-member-p (x variate) (declare (ignore variate)) (<= 0.0 x 1.0))(il:* il:|;;| "counts  ")(defparameter *counts-methods* (make-variate-methods :member-p (quote counts-member-p) :instance-member-p (quote within-variate-range) :greater-p (quote number-greater-p)))(defstruct (counts (:constructor %make-counts) (:include ordered-variate (methods *counts-methods*))))(defun make-counts (&key name documentation (min 0) max) (%make-counts :name name :documentation (string documentation) :min min :max max))(defun counts-member-p (x variate) (declare (ignore variate)) (and (integerp x) (> x 0)))(il:* il:|;;| "ranks  ")(defparameter *ranks-methods* (make-variate-methods :member-p (quote counts-member-p) :instance-member-p (quote within-variate-range) :greater-p (quote number-greater-p)))(defstruct (ranks (:constructor %make-ranks) (:include ordered-variate (methods *ranks-methods*))))(defun make-ranks (&key name documentation (min 0) max) (%make-ranks :name name :documentation (string documentation) :min min :max max))(il:* il:|;;| "grades  ")(defparameter *grade-methods* (make-variate-methods :member-p (quote grade-member-p) :instance-member-p (quote grade-member-p) :greater-p (quote grade-greater-p)))(defstruct (grade (:constructor %make-grade) (:include ordered-variate (methods *grade-methods*))) ordering)(defun make-grade (&key name documentation ordering) (%make-grade :name name :documentation (string documentation) :ordering (copy-seq ordering) :min (first ordering) :max (first (last ordering))))(defun grade-member-p (x variate) (and (member x (grade-ordering variate) :test (function equal)) t))(defun grade-greater-p (x y variate) (let* ((grade-ordering (grade-ordering variate)) (tail-y (member y grade-ordering :test (function equal))) (tail-x (member x grade-ordering :test (function equal)))) (if (null tail-x) (error "~s is not a member of: ~s" x grade-ordering)) (if (null tail-y) (error "~s is not a member of: ~s" y grade-ordering)) (and (member x tail-y :test (function equal)) t)))(il:* il:|;;| "categories  ")(defparameter *category-methods* (make-variate-methods :member-p (quote category-member-p) :instance-member-p (quote category-member-p) :greater-p (function (lambda (&rest args) (declare (ignore args)) (error "Order is undefined for categorical variables")))))(defstruct (category (:constructor %make-category) (:include variate (methods *category-methods*))) labels)(defun make-category (&key name documentation labels) (%make-category :name name :documentation (string documentation) :labels (copy-seq labels)))(defun category-member-p (x variate) (and (member x (category-labels variate) :test (function equal)) t))(eval-when (load compile)(export (quote (variates define-variate variate variate-p variate-name variate-documentation variate-methods ordered-variate ordered-variate-p general general-p make-general balance balance-p make-balance amount amount-p make-amount percent percent-p make-percent counts counts-p make-counts ranks ranks-p make-ranks grade grade-p make-grade category category-p make-category)) (find-package "VARIATES")))(xcl:define-file-environment "VARIATES" :package (xcl:defpackage "VARIATES" (:use "LISP" "PT") (:nicknames "VR") (:prefix-name "VR")) :readtable "XCL" :compiler :compile-file)(il:putprops il:variates il:copyright ("Xerox Corporation" 1988))(il:declare\: il:dontcopy  (il:filemap (nil)))il:stop