One option is to define a 'minilanguage' for matrix manipulations, and implement it as a new bit of syntax that you can implement with "syntax-rules" or "syntax-case":

(matrixy (multiply (transpose A) B))

If you want something that doesn't require operations to be structured like this syntactically to optimize them, then two more options:

* Make your matrix objects be 'lazy' about the operations. So, for example, instead of actually performing the transpose, you represent the input to the transpose and the fact that a transpose operation should be applied. Then you represent that a multiply should be applied. Then, when you finally want access actual numbers within a matrix object, you see the sequence of transformations at once and can choose an efficient algorithm. The user of the matrix object does not need to know that this is happening.

* Implement a language that translates to Scheme after reasoning about data flow.

These are off-the-cuff.  I'm sure there are more ideas out there.

--
http://www.neilvandyke.org/
_________________________________________________
 For list-related administrative tasks:
 http://lists.racket-lang.org/listinfo/users

Reply via email to