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.
and I need to take a better look at APL derivatives.

--- Jussi Piitulainen <>
> 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,

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

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


Do You Yahoo!?
Find the one for you at Yahoo! Personals