(send 1 + 2)
(describe-class INTEGER)
(defmessage-handler NUMBER + (?arg)
(+ ?self ?arg))
(defmessage-handler LEXEME + (?arg)
(sym-cat ?self ?arg))
(send sun + day)
(defmessage-handler USER what-am-i primary ()
(printout t "I am a/an " (class ?self) "." crlf))
(send [c2] what-am-i)
(defmessage-handler VECTOR * primary (?scalar)
(send ?self put-x (* ?self:x ?scalar))
(send ?self put-y (* ?self:y ?scalar))
(return ?self) )
(defmessage-handler VECTOR = primary (?v)
(send ?self put-x (send ?v get-x))
(send ?self put-y (send ?v get-y))
(return ?self) )
(send (send [v1] = [I]) * 3)
(defmessage-handler VENUS-FLY-TRAP
put-mobility-rate around ($?any)
(printout t "Hey! I'm not allowed to move!"
crlf))
(defmessage-handler USER init before ()
(printout t "*** Starting to make instance "
(instance-name ?self) " ***" crlf))
(defmessage-handler USER init after ()
(printout t "*** Finished making instance "
(instance-name ?self) " ***" crlf))
Example: vector.clp
(defclass ANIMAL (is-a USER) ; user-defined class
(role abstract) ; no instance can be made
(slot mobility-rate))
(defclass PLANT (is-a USER)
(role abstract)
(slot CO2-comsumption-rate))
(defclass VENUS-FLY-TRAP (is-a PLANT ANIMAL) ; Multiple Inheritance
(role concrete))
Example: life.clp
(defclass POINT (is-a USER)
(role concrete)
(multislot point1))
(defclass LINE (is-a POINT)
(role concrete)
(multislot point2))
(defclass TRIANGLE (is-a LINE)
(role concrete)
(multislot point3))
(defclass POINT (is-a USER)
(role concrete)
(multislot position
(create-accessor read-write)
(propagation no-inherit)))
(defclass LINE (is-a POINT)
(slot point1
(create-accessor read-write)
(default-dynamic (make-instance (gensym*) of POINT))
(propagation no-inherit))
(slot point2
(create-accessor read-write)
(default-dynamic (make-instance (gensym*) of POINT))
(propagation no-inherit)))
(defmessage-handler LINE find-point (?point)
(send (send ?self (sym-cat "get-point" ?point)) get-position)
)
(defmessage-handler LINE print-points ()
(printout t "point1 " (send ?self find-point 1) crlf
"point2 " (send ?self find-point 2) crlf)
)
Example: triangle.clp
(defmessage-handler PERSON print-age primary ()
(printout t "Age = " ?self:age crlf))
(defmessage-handler PERSON print-age primary ()
(printout t "Age = " (dynamic-get age) crlf))
Example:
(defclass A (is-a USER)
(slot foo (create-accessor read)))
(defclass B (is-a A)
(role concrete)
(slot foo))
(make-instance b of B)
(send [b] get-foo) ; the direct slot access will fail, because the slot foo redefined in class B.
; See:defmessage-handler Actions
(defmessage-handler A get-foo ()
(dynamic-get foo))
(defclass B (is-a A)
(role concrete)
(slot foo (visibility public)))
(defmessage-handler PERSON
lie-about-age around (?change)
(bind ?old-age ?self:age)
(if (next-handlerp) then
(call-next-handler))
(bind ?new-age ?self:age)
(if (<> ?old-age ?new-age) then
(printout t
"He's really " ?old-age "." crlf)))
Example: age.clp
Reference:
Previous Class and Inheritance Up TOC Next Design Examples