In order to facilitate writing pattern-var and pattern-form,
a read macro is defined. More specifically, ?
character is used
to denote the beginning of the pattern-var and !
character
is used to denote the beginning of the pattern-form. Inside the
pattern-var, &
character signifies the start of the
value-restriction and !
character signifies the start of
the form-restriction. The syntax is given below.
pattern-var-read ::=?
pattern-var-name{&
value-restriction}*[!
form-restriction] pattern-form-read ::=!
lisp-form
There should be no space before &
and !
characters inside
pattern-var-read. The pattern-var-read is expanded to a
corresponding pattern-var at the read time, and the
pattern-form-read is also expanded to a corresponding
pattern-form at the read time.
Example:
?var&(> 3)&(< 5)!(test ?var) =>(:? var :value-restriction ((> 3)(< 5)) :form-restriction (test (:? var))) !(test-form ?var) =>(:! (test-form (:? var)))
Macro: use-readtable &optional readtable-name
When the customized readtable mentioned above is used, the Common Lisp
variable *readtable*
needs to be set appropriately. This macro
is provided for this purpose, and this macro should be called right
after (in-package ...)
in the program file. readtable-name
is provided for a Lisp implementation which has the named readtable
facility such as Allegro Common Lisp Ver. 4.2. In this implementation,
AgenTalk's customized readtable is defined as the named readtable
:agentalk
, and the default value of readtable-name is
:agentalk
. In other Lisp implementations, readtable-name
should not be specified.