Not quite enough abstraction
Brad Lucier
(26 Jan 2002 08:10 UTC)
|
Re: Not quite enough abstraction
Jussi Piitulainen
(28 Jan 2002 12:21 UTC)
|
Re: Not quite enough abstraction
David Rush
(28 Jan 2002 12:39 UTC)
|
Re: Not quite enough abstraction
Jussi Piitulainen
(28 Jan 2002 16:01 UTC)
|
Re: Not quite enough abstraction
David Rush
(28 Jan 2002 16:51 UTC)
|
Re: Not quite enough abstraction Jussi Piitulainen (29 Jan 2002 09:05 UTC)
|
Re: Not quite enough abstraction
Noel Welsh
(29 Jan 2002 12:31 UTC)
|
David Rush writes: > Jussi Piitulainen writes: >> separate index arithmetic from backing vectors entirely? The nature >> of the package would change rather a lot - quite possibly to the >> better. > I had the impression that we were mostly there right now. Or have > you not added the index-object interfaces in the new revision? I > could be seriously confused at this point. I don't see what this has to do with the backing vectors. They are as hidden as before. By "backing vector" I mean a one-dimensional data structure that contains the actual elements of the array. Yes, I've added a kind of index objects, so that the indices can be packaged in a vector or an array, but they are just so that the following three, for example, mean the same. (array-ref arr k1 ...) (array-ref arr (vector k1 ...)) (array-ref arr (array (shape 0 n) k1 ...)) The mapping from k1 ... to the single integer index to the backing vector is still hidden inside arr. >> Where do your sparse matrices come from if not from something like >> make-array? > > Well that's the point: they come from something *like* make-arry, > but not make-array itself. Specifically, in emulating the behaviour > of the SVDPACK library, the array data comes in from a specific file > format. I'll store that in some tree-structure and implement a > version of array-ref which knows how to walk that structure, > returning 0 for empty entries. In the end, array-ref and array-set! are all that actually access the underlying data structure. In my implementations, they reduce to vector-ref and vector-set!, which can be replaced with appropriate calls. Aha. I think I begin to see the light now. See below. > The point is that there should be no explicit dependence in the API > on a particular implementation strategy. I don't think that any > exists right now (except possibly using arrays themselves as the > index objects to arrrays). I agree about explicit dependence. What I was wondering now is, how about doing away with the underlying data structure altogether? Or, more likely, provide a mechanism for attaching the index arithmetic machinery on any underlying data structure with two operations like vector-ref and vector-set!. One would then implement make-array so: (define (make-array shape o) (make-indexed-thing shape (make-vector (shape-size shape) o) vector-ref vector-set!)) And one would implement a tremendously huge but immutable and very sparse matrix so: (define (read-sparse-array shape port) (make-indexed-thing shape (read-tree port) tree-ref error)) And one could equally easily use the f64vector and the like that Brad Lucier wanted. That should not be hard to do at this point. The index mapping would remain hidden alright, but the backing vector could be exposed if the programmer wished to keep a handle on it. That's alright. I still think the index objects were a separate issue, or else I misunderstood something about them. -- Jussi