This is a follow up on the syntactic sugar for array referencing that I referred to in my wish list.  Here is what I had in mind.<br><br>A few weeks ago, I needed the inverse of a tridiagonal matrix.  I found an algorithm on the web.  See the first page of the following <a href="http://www.mat.uc.pt/preprints/ps/p0516.pdf">pdf document</a>.<br>
<br>I am looking for a cleaner and simpler way to transcribe equations  (1.1) and the two below in lisp.  Note a few things.  In the equation for `theta', the index of `theta' varies from 0...n, while all the other ones are from 1...n.  <br>
<br>Another problem of interest is the Yee algorithm for the numerical solution of time-dependent Maxwell equations.  Take a look at the equations following (4.12) on the following <a href="http://www.nmr.mgh.harvard.edu/%7Eadunn/papers/dissertation/node32.html">page</a>.  The indices are, among other things, i+1/2.  The notation stems from the fact that the algorithm uses two staggered grids, one for the electric, and the other for the magnetic fields.  The 1/2 reflects the grid offset.  Of course, in actual implementation, the fields are stored in matrics, and the indices are integers.<br>
<br>For both of these cases, one has to do some kind of index transformation, so that E_{i+1/2} becoms (aref E (some-function-of i)).  With many equations, for scatterbrains like me, that is a recipe for a missed or miscalculated offset.<br>
<br>I came up with a macros that will transform code that contains symbols like E_i+1/2 into an appropriately referenced `aref' or `maref' by using symbol-macrolet.<br><br>For the theta equations, see the following <a href="http://paste.lisp.org/display/93525">code snippet</a> on <a href="http://paste.lisp.org">paste.lisp.org</a>, where the with-_-indexing1 macro does the transforming.  One thing to be aware of is that the macros expand into code of `finite' length.  So, inserting this macro as follows<br>
(if (...)<br>   (with-_-indexing ()<br>      (if clause)<br>      (else clause))<br>will be inaccurate.  One has to move the `with-_-indexing' outside of the `if'.<br><br>When I clean up my routines, I will post them (somewhere, not yet sure where).  And if anyone has a better idea how to name the macros, please let me know.<br>
<br>Mirko<br><br><br>On Tue, Jan 12, 2010 at 5:20 PM, Mirko Vukovic <span dir="ltr"><<a href="mailto:mirko.vukovic@gmail.com">mirko.vukovic@gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Features that I would like:<br><ol><li>Compatibility with GSLL and LAPACK (and NETLIB for that matter).  When doing numerics, I would use grid (or xarray) and forget about cl-arrays.<br></li><li>More forgiving interface in array creation: coerce supplied values to declared type</li>

<li>syntactic sugar: refer to array subscripts using underscores: a_i_j or a_2:5_*</li></ol>On that last point, I have a small utility that does the first example.  I am not sure where to post it for your review.  I  think github is overkill to post three files (asd, package, and lisp).<br>

<br>I am intrigued by xarrays' generic interface, so that xarrays can interface with `any type of object'.  I fail to see its use now, but that is just my lack of imagination.<br><br>On a `lack of imagination' topic, can someone give me an example of indexing that xarray has, and that the affine indexing cannot accomplish?<br>

<br>Thanks,<br><font color="#888888"><br>Mirko</font><div><div></div><div class="h5"><br><br><div class="gmail_quote">On Sun, Jan 10, 2010 at 3:20 PM, Liam Healy <span dir="ltr"><<a href="mailto:lhealy@common-lisp.net" target="_blank">lhealy@common-lisp.net</a>></span> wrote:<br>



<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">I don't think there's any doubt we all want one all-singing<br>
all-dancing interface that provides array utility for everything in CL<br>
that needs it.  The reason there are two starts is because we both<br>
started in parallel without the being aware of the other's work.  The<br>
reason that GSD only got as far as it did was because I had addressed<br>
the complaints on this mailing list and elsewhere (including me) and I<br>
had no more time.  I do not think of it as complete.<br>
<br>
So the real work here is going through both sets of code and figuring<br>
out how to unify them.  I think all the help we can get would be<br>
welcome; I'm certainly willing to work toward the goal.<br>
<br>
To get the ball rolling, start with a feature at a user's level that<br>
you need; I mean by this some very specific thing that you've coded in<br>
CL already and found to be clumsy.  Then see how each package<br>
implements it or would implement it.  Then post to the list your<br>
findings, together with your example if possible, to start a<br>
discussion.  Anyone can do this; I don't think there's a need to<br>
restrict to a "third party"; we lack a first party at the moment.  By<br>
picking single feature(s) and working from there, we will<br>
incrementally get to the goal we all seek.  If we try to do everything<br>
at once or at the most abstract level, we're likely not going to get<br>
there as quickly.<br>
<font color="#888888"><br>
Liam<br>
</font><div><br>
On Sun, Jan 10, 2010 at 11:50 AM, A.J. Rossini <<a href="mailto:blindglobe@gmail.com" target="_blank">blindglobe@gmail.com</a>> wrote:<br>
> My cursory look suggests a fair amount of similarity as well, and I<br>
> find attractive features in both -- but want just one API!<br>
><br>
> A reasonable proposal, from my highly biased perspective, would be a<br>
> 3rd party merge of the better components of each.<br>
><br>
> (I've spent time with the xarray interface, which is the source of my<br>
> biases -- it mostly works for what I want to do, despite being a<br>
> simplification of the lisp-matrix access approach -- which isn't bad,<br>
> there are some lisp-matrix functionality which is strictly edge-case<br>
> relevant...<br>
><br>
<br>
</div><div><div></div><div>_______________________________________________<br>
Gsll-devel mailing list<br>
<a href="mailto:Gsll-devel@common-lisp.net" target="_blank">Gsll-devel@common-lisp.net</a><br>
<a href="http://common-lisp.net/cgi-bin/mailman/listinfo/gsll-devel" target="_blank">http://common-lisp.net/cgi-bin/mailman/listinfo/gsll-devel</a><br>
</div></div></blockquote></div><br>
</div></div></blockquote></div><br>