Re: Psi Calculus Noel Welsh 16 Nov 2001 14:24 UTC

Sorry it's taken me so long to respond.  I've been
trying to read up on mathematics of arrays (mostly
unsuccessfully) so that I might have more intelligent
things to say.  In addition to SAC, the FISh langauge
is worth a look.
http://www-staff.mcs.uts.edu.au/~cbj/FISh/index.html
and I need to take a better look at APL derivatives.

--- Jussi Piitulainen <xxxxxx@ling.helsinki.fi>
wrote:
> It doesn't provide sharing as a primitive
> notion. I suppose it
> relies on a compiler to avoid a lot of unnecessary
> copying.

I believe so.

> I think,
>
> 1) modarray single element case in Scheme would _be_
> array-set!, not
>    make it redundant;

Not quite.  modarray is functional in SAC.  It returns
a new array.

> 2) reshape is partly provided by share-array and
> partly not provided
>    in current srfi-25; the row major stuff mentioned
> in Issues would
>    provide the latter part;

I think there needs to be something to get all the
data from the array.  Maybe

  (flatten array) -> vector

Gets the data part of an array in row-major order.

> 4) there is no way around Scheme being an imperative
> language with
>    runtime typing; static compiler optimisations are
> not in reach, nor
>    is anything restricted to single assignment.

Hmmm...I don't want to start a bun-fight here.
Optimisation is more difficult in Scheme because the
language hasn't been designed to make certain
properties obvious, but it is not impossible.  See,
e.g., http://library.readscheme.org/

A few more issues:

I think the basic procedures should all work on
vectors as arguments.  E.g. instead of

  (array-ref array x1 x2 ...)

I'd vouch for

   (array-ref array index-vector)

Why?  To preserve symmetry.  With functions returning
lists there is the nice symmetry that those results
can be immediately applied as the arguments to another
function.  No such symmetry exists with array-ref as
it currently stands.  You can't, e.g., get an array
slice representing an index and then apply that to
array-ref.

I also think there is a need for a simple array slice
primitive (equivalent to the psi function in SAC).
The provided function, though expressive, is complex
and makes writing simple array slices unduly
difficult.

cya,
Noel

__________________________________________________
Do You Yahoo!?
Find the one for you at Yahoo! Personals
http://personals.yahoo.com