superfluous functions? Jamison Hope (29 Sep 2015 16:57 UTC)
Re: superfluous functions? Bradley Lucier (29 Sep 2015 17:08 UTC)
Re: superfluous functions? Jamison Hope (29 Sep 2015 17:48 UTC)
Re: superfluous functions? Bradley Lucier (07 Oct 2015 01:15 UTC)
Re: superfluous functions? Jamison Hope (11 Oct 2015 14:45 UTC)
Re: superfluous functions? Bradley Lucier (16 Oct 2015 17:44 UTC)

Re: superfluous functions? Bradley Lucier 16 Oct 2015 17:44 UTC

Many good points.

On 10/11/2015 10:45 AM, Jamison Hope wrote:
>
> On Oct 6, 2015, at 9:15 PM, Bradley Lucier <xxxxxx@math.purdue.edu> wrote:
>
>> How's this for a new API and description for array-curry (still in
>> progress):
>>
>> Procedure: array-curry array outer-dimension [ subarray-type 'immutable ]
>>
>> If array is an array whose domain is an interval [l0, u0) x ... x [ld-1,
>> ud-1) and outer-dimension is an exact integer strictly between 0 and d,
>> then array-curry returns an (immutable) array with domain [l0, u0) x
>> ...x [louter-dimension-1, uouter-dimension-1), each of whose entries is
>> in itself an array with domain [louter-dimension, uouter-dimension) x
>> ... x [ld-1, ud-1).
>
> Better, but it could still be more clear about how the elements of the
> return value relate to the elements of the array argument.  The way
> it's worded here, the function could just be using the array argument as
> a prototype to figure out the correct domain and type.

Good catch.  I'll add something.

>
>> The type of the subarrays is determined by the optional argument
>> subarray-type in combination with the type of the input array.
>>
>> If subarray-type is 'mutable, and the input array is mutable (which
>> includes specialized arrays), then each subarray is mutable.
>>
>> If subarray-type is 'specialized and the input array is specialized,
>> then each subarray is specialized.
>
> Does subarray-type always have to be either 'immutable or the same as
> the type of the input array?  In that case, the last argument is really
> just a binary choice: [immutable] vs [same as input].

I'm going to change it so that the type of all the subarrays is the same
type as the input array, no optional argument

>
> But I think what I really want to know here is whether (or when)
> array-curry is making a copy of the data, or just providing a new view
> into the original.  If it isn't a copy, then the distinction between
> 'mutable and 'specialized seems irrelevant -- the result's setters just
> wrap a call to the original's setter either way.  And if the original
> doesn't have a setter because it's immutable, array-curry should be able
> to figure that out on its own without me passing an argument.
>
>
> I might just prefer array-curry to always return an array-of-arrays with
> the same mutability as its argument and forgo subarray-type completely:
>
> (array-curry ARR N)
>
> returns an array of immutable arrays if ARR is immutable, otherwise
> returns an array of arrays whose setters call through to ARR's setter.
>
>
> The implementation would probably be simplified if the array and
> mutable-array functions were merged, so that array takes an optional
> setter (or #f).

I haven't thought this one through, but I'll probably do it.

>
>
> If I want to produce an immutable view into an array, maybe that should
> be a distinct operation, something like
>
> (define (immutable-array ARR)
>    (array (array-domain ARR) (array-getter ARR)))

Thanks for your comments.

Brad