From 4e987026148fe65c323afbc93cd560c07bf06b3f Mon Sep 17 00:00:00 2001 From: Yale AI Dept Date: Wed, 14 Jul 1993 13:08:00 -0500 Subject: Import to github. --- cl-support/cl-types.lisp | 90 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 cl-support/cl-types.lisp (limited to 'cl-support/cl-types.lisp') diff --git a/cl-support/cl-types.lisp b/cl-support/cl-types.lisp new file mode 100644 index 0000000..6fb625e --- /dev/null +++ b/cl-support/cl-types.lisp @@ -0,0 +1,90 @@ +;;; cl-types.lisp -- type-related stuff +;;; +;;; author : Sandra Loosemore +;;; date : 5 Oct 1992 +;;; + + +;;; Export CL symbols for type names + +(define-mumble-import t) + +#+lucid +(define-mumble-type mumble::procedure () 'system::procedure) +#+(or cmu akcl allegro mcl lispworks) +(define-mumble-type mumble::procedure () 'function) +#+wcl +(define-mumble-type mumble::procedure () 'lisp:procedure) +#-(or lucid cmu akcl allegro mcl lispworks wcl) +(missing-mumble-definition procedure) + +(define-mumble-type mumble::pair () 'cons) + +(define-mumble-import null) + +(define-mumble-type mumble::list (&optional element-type) + ;; *** Common Lisp provides no way to make use of the element type + ;; *** without using SATISFIES. + (declare (ignore element-type)) + 'list) + +(define-mumble-import symbol) + +(define-mumble-type mumble::char () 'character) +(define-mumble-type mumble::string () 'simple-string) +(define-mumble-type mumble::vector () 'simple-vector) + +(define-mumble-import number) +(define-mumble-import integer) +(define-mumble-import rational) +(define-mumble-import float) +(define-mumble-import fixnum) + +(define-mumble-type mumble::int () 'fixnum) + +(define-mumble-type mumble::table (&optional key-type value-type) + ;; *** Common Lisp provides no way to make use of the element type + ;; *** without using SATISFIES. + (declare (ignore key-type value-type)) + 'hash-table) + + +;;; Extensions + +(define-mumble-type mumble::enum (&rest values) + `(member ,@values)) + +(define-mumble-type mumble::tuple (&rest element-types) + ;; *** Common Lisp provides no way to make use of the element type + ;; *** without using SATISFIES. + (let ((n (length element-types))) + (cond ((< n 2) + (error "Too few arguments to TUPLE type specifier.")) + ((eql n 2) + 'cons) + (t + 'simple-vector)))) + +(define-mumble-type mumble::bool () 't) + +(define-mumble-type mumble::alist (&optional key-type value-type) + `(mumble::list (tuple ,key-type ,value-type))) + +(define-mumble-type mumble::maybe (type) + `(or ,type null)) + + + +;;; Functions, etc. + +(define-mumble-import the) +(define-mumble-synonym mumble::subtype? subtypep) + +(define-mumble-function-inline mumble::is-type? (type object) + (typep object type)) + +(define-mumble-macro mumble::typecase (data &rest cases) + (let ((last (car (last cases)))) + (if (eq (car last) 'mumble::else) + `(typecase ,data ,@(butlast cases) (t ,@(cdr last))) + `(typecase ,data ,@cases)))) -- cgit v1.2.3