CHICKEN Scheme’s included
memory representation module
This is a focused look at a single method from CHICKEN Scheme’s included
(chicken memory representation) module
from the point of view of
matrico’s matrix functor module.
The particular considered method makes a recursive memory duplicate of its argument:
(object-copy any)- Returns a (recursive) copy of the argument.
This copying functionality becomes visibly relevant as soon as a (
matrico)-user mutates matrix entries.
matrico only a single user-facing function allows mutation, namely
matrix-set! which beomces user-facing as
As an example, after a matrix is created, a part is extracted and then an element of the extracted sub-matrix is mutated;
this would, without an
object-copy in the extracting function, also change the original source matrix from which was extracted,
as these are the same objects in memory.
I would have preferred to not have any mutation, but it is sometimes necessary to manipulate single entries, for example in spatial discretization of a partial differential equation, in the method of lines, where specific boundary values need to be manually added to a semi-discretized operator.
As mentioned in the last post, this copying issue affects the functions:
but does not seem to impact performance.
However, the non-mutating
matrix-set function, a non-mutating variant of
copying a given matrix and returning the copy after changing one entry, also uses
In the next post, I progress from the generic matrix functor to the matrix type used practically in