There are three types of access facets which can be specified for a slot: read-write, read-only, and initialize-only. The read-write facet is the default and says that a slot can be both written and read. The read-only facet says the slot can only be read; the only way to set this slot is with default facets in the class definition. The initialize-only facet is like read-only except that the slot can also be set by slot overrides in a make-instance call (see section 9.6.1) and init message-handlers (see section 9.4). These privileges apply to indirect access via messages as well as direct access within message-handler bodies (see section 9.4). Note: a read-only slot that has a static default value will implicitly have the shared storage facet.
Example
CLIPS> (clear) CLIPS> (defclass A (is-a USER) (role concrete) (slot foo (create-accessor write) (access read-write)) (slot bar (access read-only) (default abc)) (slot woz (create-accessor write) (access initialize-only))) CLIPS> (defmessage-handler A put-bar (?value) (dynamic-put (sym-cat bar) ?value)) CLIPS> (make-instance a of A (bar 34)) [MSGFUN3] bar slot in [a] of A: write access denied. [PRCCODE4] Execution halted during the actions of message-handler put-bar primary in class A FALSE CLIPS> (make-instance a of A (foo 34) (woz 65)) [a] CLIPS> (send [a] put-bar 1) [MSGFUN3] bar slot in [a] of A: write access denied. [PRCCODE4] Execution halted during the actions of message-handler put-bar primary in class A FALSE CLIPS> (send [a] put-woz 1) [MSGFUN3] woz slot in [a] of A: write access denied. [PRCCODE4] Execution halted during the actions of message-handler put-bar primary in class A FALSE CLIPS> (send [a] print) [a] of A (foo 34) (bar abc) (woz 65) CLIPS>