;; -*- Mode:Common-Lisp;Package:mma; Base:10 -*-
(in-package :mma)
;; interval package ;; rational endpoints, usually

(defstruct (interval
	    (:constructor make-int
			  (low hi 
				    &key (leftopen nil)(rightopen nil) (exterior nil)))
	    (:print-function intervalprintfunction))
  (left  0                  :type number :read-only t)
  (right 0                  :type number :read-only t)
  (exterior nil :readonly nil))

;; print regular interval as [< 0 , 2>]; exterior as [< 2 ,><, 0]

(defun intervalprintfunction (x s pl)  ;pl, print-level, is not used.
  (if (interval-exterior x)

     (format s "[<~s ,><, ~s>]"  ;; exterior  e.g. (make-int 2 1 :exterior t)
		 (interval-left  x)
		 (interval-right x))
    	 (format s "[<~s , ~s>]"
		 (interval-left  x)
		 (interval-right x))))