luv

Workshop wiki

records.lisp

arithmetic/records/records.lisp

system luv/arithmetic · 33 definitions · on GitHub

Quantity declarations on ordinary Common Lisp classes and structures.

in-package#:luv.arithmetic.records
define-conditionquantity-slot-conflict
error
class:initarg:class:readerquantity-slot-conflict-class
slot-name:initarg:slot-name:readerquantity-slot-conflict-slot-name
declarations:initarg:declarations:readerquantity-slot-conflict-declarations
:report
lambda
conditionstream
formatstream"Class ~S inherits conflicting quantity declarations for slot ~S."
class-name
quantity-slot-conflict-classcondition
quantity-slot-conflict-slot-namecondition
defgenericrecord-slot-name
:documentation

Return the slot name described by declaration.

defclassquantity-direct-slot-definition
closer-mop:standard-direct-slot-definition
quantity-options:initarg:quantity:readerquantity-slot-options
quantity-specification:initformnil:accessorquantity-slot-specification
defmethodinitialize-instance:after
setf
quantity-slot-specificationslot
defclassquantity-effective-slot-definition
closer-mop:standard-effective-slot-definition
quantity-source-form:initform:readerquantity-slot-source-form
defclassquantity-class
closer-mop:standard-class
:documentation

A standard class whose annotated slots retain quantity declarations.

Slot access and instance representation remain ordinary CLOS. The metaclass only makes definition-time meaning inspectable and inheritable. #OXBSAY

defmethodcloser-mop:validate-superclass
superclasscloser-mop:standard-class
declare
ignoreclasssuperclass
t
defunquantity-option-present-p
initargs
loopfor
key
oninitargsby#'cddrthereis
eqkey:quantity
defmethodmath:declaration-representation-type
closer-mop:slot-definition-typeslot
defmethodmath:declaration-source-form
list
closer-mop:slot-definition-nameslot
:type
closer-mop:slot-definition-typeslot
:quantity
quantity-slot-optionsslot
defmethodrecord-slot-name
closer-mop:slot-definition-nameslot
defmethodmath:declaration-representation-type
closer-mop:slot-definition-typeslot
defmethodmath:declaration-source-form
quantity-slot-source-formslot
defmethodrecord-slot-name
closer-mop:slot-definition-nameslot
defunquantity-slot-declaration=
leftright
let
or
and
nullleft-specification
nullright-specification
andleft-specificationright-specification
math:quantity-specification=left-specificationright-specification
defmethodcloser-mop:compute-effective-slot-definition
namedirect-slots
let
quantity-slots
remove-if-notdirect-slots
when
andquantity-slots
not
every
lambda
slot
quantity-slot-declaration=
firstquantity-slots
slot
restquantity-slots
error'quantity-slot-conflict:classclass:slot-namename:declarationsquantity-slots
let
*effective-quantity-slot*
firstquantity-slots
call-next-method
defmethodcloser-mop:effective-slot-definition-class
&restinitargs
declare
ignoreinitargs
defclassstructure-slot-declaration
record-name:initarg:record-name:readerstructure-slot-record-name
slot-name:initarg:slot-name:readerrecord-slot-name
defclassstructure-declaration
name:initarg:name:readerstructure-declaration-name
slot-declarations:initarg:slot-declarations:readerstructure-declaration-slot-declarations
:documentation

The replaceable semantic schema emitted beside one ordinary DEFSTRUCT.

defgenericstructure-declaration-for
name
:documentation

Return the semantic structure schema named by name, or NIL.

defmethodstructure-declaration-for
name
declare
ignorename
nil
defgenericrecord-slot-declarations
record
:documentation

Return every quantity-bearing slot declaration in record.

defmethodrecord-slot-declarations
structure-declaration-slot-declarationsrecord
defmethodrecord-slot-declarations
unless
closer-mop:class-finalized-pclass
closer-mop:finalize-inheritanceclass
remove-if-not
closer-mop:class-slotsclass
defmethodrecord-slot-declarations
namesymbol
let
cond
structure
let
class
find-classnamenil
tnil
defunrecord-slot-declaration
recordslot-name

Return record's quantity-bearing slot-name declaration, or NIL.

findslot-name:key#'record-slot-name:test#'eq
eval-when
:compile-toplevel:load-toplevel:execute
defunsplit-quantity-structure-slot
description
when
symbolpdescription
return-fromsplit-quantity-structure-slot
valuesdescriptionnil
destructuring-bind
name&optionalinitform&restoptions
description
when
oddp
lengthoptions
error"Malformed DEFSTRUCT slot options in ~S."description
let
quantity-present-pnil
ordinary-optionsnil
loopfor
keyvalue
onoptionsby#'cddrdo
if
eqkey:quantity
progn
whenquantity-present-p
error"Duplicate :QUANTITY option in ~S."description
setfquantity-present-ptquantityvalue
setfordinary-options
appendordinary-options
listkeyvalue
values`
,name,initform,@ordinary-options
andquantity-present-p
list:namename:representation-type
or
getfordinary-options:type
t
:quantityquantity:source-formdescription
defmacrodefine-quantity-struct
name-and-options&bodyslot-descriptions

Define an ordinary structure whose annotated slots publish quantity meaning.

The runtime representation and accessors are still those of DEFSTRUCT. #FLRFU8

let
name
if
symbolpname-and-options
name-and-options
firstname-and-options
ordinary-slotsnil
semantic-slotsnil
dolist
descriptionslot-descriptions
multiple-value-bind
ordinarysemantic
split-quantity-structure-slotdescription
pushordinaryordinary-slots
whensemantic
pushsemanticsemantic-slots
setfordinary-slots
nreverseordinary-slots
semantic-slots
nreversesemantic-slots
`
progn
defstruct,name-and-options,@ordinary-slots
defmethodstructure-declaration-for
record-name
eql',name
declare
ignorerecord-name
load-time-value
make-instance'structure-declaration:name',name:slot-declarations
list,@
loopforslotinsemantic-slotscollect`
make-instance'structure-slot-declaration:record-name',name:slot-name',
getfslot:name
:representation-type',
getfslot:representation-type
:quantity-specification:source-form',
getfslot:source-form
',name