This is the mail archive of the
kawa@sourceware.org
mailing list for the Kawa project.
Re: APL-style array indexing in Kawa - a sketch
- From: Jamison Hope <jrh at theptrgroup dot com>
- To: kawa at sourceware dot org
- Date: Mon, 17 Aug 2015 23:37:42 -0400
- Subject: Re: APL-style array indexing in Kawa - a sketch
- Authentication-results: sourceware.org; auth=none
- References: <55CD4B6A dot 8010606 at bothner dot com> <4E24D268-9062-465B-BF2B-966806394A39 at theptrgroup dot com> <55D2648B dot 2040203 at bothner dot com>
On Aug 17, 2015, at 6:47 PM, Per Bothner <per@bothner.com> wrote:
> We could define [<:] as a supported syntax (see $bracket-list$ in syntax.scm).
> It would be relative easy to define 0 as the default lower bound, but that
> doesn't quite do what you want. We could define [<;] as a special magic value
> that gets coerced to a specific range depending on context.
Hmm can we pick something that won't confuse paredit mode?
> Why wouldn't you just use: (T [0 <: 3] 3) ?
Oh, right. I wasn't sure whether you could mix array indices and
scalar indices like that, but that certainly simplifies it.
> It seems reasonable to offer a 1-argument array-copy function.
> In addition to copying (necessary parts of) the data array,
> it would simplify the IntArray interface to an ArrayMapper.
>
> Note that array-copy is a special case of:
> (make-array-from-function SHAPE FUNCTION)
> since a rank-N array can be treated as N-ary function.
Yeah. It occurs to me that this general function->array concept
overlaps quite a bit with expression templates from C++. (This is a bit
off-topic w.r.t. APL style, but oh well.) In addition to doing this
index mapping to create arrays from other arrays by permuting elements,
it would be useful to have a mechanism to construct an array that keeps
the same indices but invokes a function on each element. So, perhaps
something like:
(array-map (lambda (x) (* 2 x)) ARR) => a new array where each element
is doubled in value.
(array-map + ARR1 ARR2) => a new array representing the elementwise sum
of the elements of ARR1 and ARR2.
(I'm imagining that the array-map call wouldn't allocate a new data
buffer, but would just close over the supplied function and array(s),
lazily applying the function to array elements as needed.)
--
Jamison Hope
The PTR Group
www.theptrgroup.com