\f
;;; trees
+#+sbcl
+(defclass binary-tree (sequence standard-object)
+ ((test :initform #1=(error "missing arg")
+ :initarg :test
+ :type 'function
+ :reader test)
+ (key :initform #1#
+ :initarg :key
+ :type 'function
+ :reader key)
+ (pred :initform #1#
+ :initarg :pred
+ :type 'function
+ :reader pred)
+ (size :initform 0
+ :initarg :size
+ :type 'fixnum
+ :accessor size)
+ (root :initform nil
+ :initarg :root
+ :type '(or null tree-node)
+ :accessor root)
+ (modcount :initform 0
+ :initarg :modcount
+ :type 'fixnum
+ :accessor modcount)
+ (nodegen :initform #1#
+ :initarg :nodegen
+ :type 'function
+ :reader nodegen)
+ (rebalance/insert :initform nil
+ :initarg :rebalance/insert
+ :type '(or null function)
+ :reader rebalance/insert)
+ (rebalance/delete :initform nil
+ :initarg :rebalance/delete
+ :type '(or null function)
+ :reader rebalance/delete)))
+
+#+sbcl
+(defun %make-binary-tree (pred key test nodegen rebalance/insert rebalance/delete)
+ (make-instance 'binary-tree :pred pred :key key :test test :nodegen nodegen
+ :rebalance/insert rebalance/insert
+ :rebalance/delete rebalance/delete))
+
+#-sbcl
(defstruct (binary-tree
(:conc-name)
(:constructor %make-binary-tree (pred key test