;;; OBJECT CLASSIFIER -- cyclic definition version
;;; SPECIFICATION [DOCUMENTATION]

#|
SPECIFICATION --- DESCRIPTION

1. Object Classifier ́Aobject𐮗black boxB
   classbrowserŌ悤ɁAobjectclassifierł݂B
   w肷邱ƂĂłB̌́A3categoryŒ`B

2. {Pʂ́Aobject̃ReiłApartitionƌĂԁB
@partitiońA(constraint)𖞂objecti[ĂB
  W_́Aɂ`݂Ȃ̂ȁBƂO?


3. \
3.1 node

IuWFNgAnodeɓo^ł邩ǂ₢킹ĂƂA
nodéAΉcategoryconstraint`FbNA^Ȃ representation
sāA̖O partitionB

āAcategory̎qcategoryɂobjecto^ł邩ǂ₢킹B

܂Acategoryxconstraint́AandŌ΂ĂBŏ

node n ŁA{Ƀ`FbN constraint ́A

t  n ɂ邷ׂẴpX̏ node m ɑ΂āA

 (constraint m)

Ƃ悤ȎɂȂBÁȂ͊֐and̂ɂȂĂB


IuWFNg𕪗ނ(ƂĂAa-->bւ̃pX͕肤)ׂ̂ĂnodéA
ނ̏̂߂̏ԂB
̏Ԃ̒ĺA[UcategoryƂɎw肷compassƂ֐ɂĐݒ肳B
Ԃ́A̐enodeւ̃N(parent*)ĂAQƂāA
Ԃ肵ȂĂ͂ȂȂB
inductionƓ悤ɂꂪ@\邽߂ɂ́AԂ̒`ɂāȀԂ
`K{łB


3.2 classifieŕA̍ڂȂB

   0) O
   1) Xbg`
   2) JeS[`

ÓAclassifier̖OłAXbǵAׂĂnodeɋʂԂ̋LqłB
parent* ́AVXeIɕt̂ŁAŒ`Ă͂ȂȂB
JeS[`́Aȉ̂ƂB

partitionԂ̍\`̂categoryƌĂԁB
   categorył́Â̂`B

   0) O                              cateogory̖O
   1) (constraint object partition)     categoryɑobjectɑ΂constraint
                                        AĺACӂlisp object
   2) (representation object partition) categoryinstanceɑobject́ApartitionɍוB
                                        lނɕrepresentationłB
                                        AĺAnil ܂t
   3) (compass partition object)        partitionɂ́AclassifierŒ`slots܂܂ĂB
                                        parent*QƂAslots̒l`֐łB
                                        Al͂Ȃł悢B


   classifieŕAcategoryɂāAЂƂ̃ev[g`B
   Ȃobject낢낢classifierɓĂƂ͂łB
   classifierɂ͎̂Ă킯ł͂ȂAOo^ĂB

4. ʓIȎg̎菇
   1) classifier`B
   2) classifierinstance쐬BꂪAobject̗eꕨłB
   3) classifierobjecto^BclassifieŕAobjectcategoryŒ`ꂽ\
      ĕނAێK؂partition쐬B
   4) classifierɓo^ꂽobject́Apartitionw肷邱ƂɂĎoƂ
      łB
      partitiońAclassifire珇Ԃɂǂ邩Apartitionpathw肷B

5. ̌v

   1)
   2)


6. C^[tFCX


;;; classifier̒`
(defclassifier name . category-def*) => classifier

;;; classifierinstance̍쐬
(make-classifier name)) => classifier instance

;;; classifierobjecto^B
(put-object ((cl classifier) object)) ==> object // place it in a fitting place
(put-object* ((cl classifier) object*)) ==> object* // place it in a fitting place

;;; classifierɓo^ꂽׂĂobjectQƂ
(get-all-object* ((cl classifier))) ==> object* // all in cl

;;; partitionƁA̎qpartitionׂ̂Ăɓo^ĂobjectQƂ
(get-all-object* ((pt partition))) ==> object* // all in pt

;;; partitionɒڊ܂܂ĂobjectQƂ
(get-object* ((pt partition))) ==> object* // in pt


;;; classifierɂ́At category, t partition ꂼBÂ
;;; ܂܂Ă
;;; classifierAꂼ t o

(get-t-category ((cl classifier))) ==> category
(get-t-partition ((cl classifier))) ==> partition

;;; partition 炻sub partition o
;; ׂĂ patrition ́At partition 玟methodJԂKp邱Ƃ
;; ǂ邱Ƃł

(child* ((pt partition))) ==> partition*

;;; category 炻sub category o
;; ׂĂcategorýAt category玟methodJԂKp邱Ƃ
;; ǂ邱Ƃł

(child* ((ct category)) ==> category*


;;; classifier Apartition path Ŏw肳ꂽpartitiono

(get-partition ((cl classifier) r-path)) ==> partition // is described by r-path


;;; path description
r-path

t is a unique partition of root category.

(t r1 r2 ...)

;;; classifier ɑ邷ׂĂobjectApatthtion path ƂƂ
;;  \method

(show ((cl classifier) method))  ;; o^Ăobjectɑ΂ẮAmethodKpB
                                 ;; ܂Amethod\methodł邱ƂOɂĂ


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|#
